C에서 32 비트 정수를 선언하는 방법
모든 플랫폼에서 항상 4 바이트 인 정수 유형을 선언하는 가장 좋은 방법은 무엇입니까? 특정 장치 나 16 비트가있는 오래된 컴퓨터에 대해서는 걱정하지 않습니다 int
.
#include <stdint.h>
int32_t my_32bit_int;
C는 정수 유형의 정확한 크기에 그다지 관심을 두지 않습니다. C99는 stdint.h 헤더를 도입합니다 . 이는 아마도 최선의 방법 일 것입니다. 그것을 포함하면 예를 들어 사용할 수 있습니다 int32_t
. 물론 모든 플랫폼이이를 지원하는 것은 아닙니다.
Corey의 대답은 내 생각에 "최상"에 맞지만 간단한 "int"도 실제로 작동 할 것입니다 (16 비트 int를 사용하는 시스템을 무시하는 경우). 이 시점에서 너무 많은 코드가 32 비트 인 int에 의존하므로 시스템 공급 업체가 변경하지 않을 것입니다.
(많은 64 비트 시스템에서 long이 32 비트 인 이유와 "long long"이있는 이유도 참조하십시오.)
하지만 int32_t를 사용할 때의 이점 중 하나는이 문제가 지속되지 않는다는 것입니다!
brg_types.h
없는 경우 Brian Gladman의 사본을 찾을 수 있습니다 stdint.h
.
brg_types.h
플랫폼에서 다양한 정수의 크기를 발견하고 8, 16, 32 및 64 비트의 일반적인 크기에 대한 typedef를 생성합니다.
inttypes.h
대신 포함해야하는 stdint.h
이유 stdint.h
는 Solaris와 같은 일부 플랫폼에서는 사용할 수 없기 때문이며 Linux와 같은 시스템 inttypes.h
에는 포함됩니다 stdint.h
. 포함하면 inttypes.h
코드가 Linux와 Solaris간에 더 이식 가능합니다.
이 링크는 내가 말하는 내용을 설명합니다. inttypes.h에 대한 HP 링크
그리고이 링크에는 왜 사용을 원하지 않는지 long
또는 int
데이터 유형에 특정 수의 비트가 존재하는지 여부를 보여주는 표가 있습니다 . 이식 가능한 데이터 유형에 대한 IBM 링크
시스템에서 stdint.h를 사용할 수없는 경우 직접 만드십시오. 저는 항상 모든 부호 / 부호없는 8, 16, 32 비트 값에 대한 typedef가있는 "types.h"라는 파일을 가지고 있습니다.
또한 대상 플랫폼에 따라 빌드 시스템에 자동 도구를 사용할 수 있습니다.
stdint.h / inttypes.h가 존재하는지, 그렇지 않은 경우 "config.h"에 적절한 typedef를 생성하는지 확인합니다.
stdint.h는 분명한 선택이지만 반드시 사용할 수있는 것은 아닙니다.
이식 가능한 라이브러리를 사용하는 경우 이미 이식 가능한 고정 너비 정수를 제공 할 수 있습니다. 예를 들어 SDL에는 Sint32
(S는 "서명 됨")이 있고 GLib에는 gint32
.
C99 이상
사용 <stdint.h>
.
구현이 2의 보수 32 비트 정수를 지원하는 경우 int32_t
.
그렇지 않다면 차선책은 int_least32_t
표현 (2의 보수, 1의 보수 등)에 관계없이 최소한 32 비트 인 구현에서 지원하는 정수 유형입니다.
또한 int_fast32_t
해당 크기 요구 사항에 대해 가장 빠른 작업을 허용하기 위해 선택한 최소 32 비트 너비의 정수 유형 이 있습니다 .
ANSI C
long
표준에서 지정한 최소 범위 요구 사항의 결과로 최소 32 비트 너비가 보장되는를 사용할 수 있습니다 .
32 비트 숫자에 맞추기 위해 가장 작은 정수 유형을 사용하려면에 정의 된 매크로와 함께 다음과 같은 전 처리기 문을 사용할 수 있습니다 <limits.h>
.
#define TARGET_MAX 2147483647L
#if SCHAR_MAX >= TARGET_MAX
typedef signed char int32;
#elif SHORT_MAX >= TARGET_MAX
typedef short int32;
#elif INT_MAX >= TARGET_MAX
typedef int int32;
#else
typedef long int32;
#endif
#undef TARGET_MAX
참고 URL : https://stackoverflow.com/questions/1229131/how-to-declare-a-32-bit-integer-in-c
'development' 카테고리의 다른 글
CSS3 플렉스 박스 : 디스플레이 : 박스 vs. 플렉스 박스 vs. 플렉스 (0) | 2020.11.07 |
---|---|
EnableWebMvc 주석 의미 (0) | 2020.11.07 |
실시간으로 텍스트 파일을 모니터링하는 방법 (0) | 2020.11.06 |
Git을 사용하여 저장소에서 일치하는 파일 이름을 검색 할 수 있습니까? (0) | 2020.11.06 |
비동기 메서드가 값을 반환하도록하는 방법은 무엇입니까? (0) | 2020.11.06 |