development

C에서 32 비트 정수를 선언하는 방법

big-blog 2020. 11. 7. 10:45
반응형

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

반응형