program story

int8_t, int_least8_t 및 int_fast8_t의 차이점은 무엇입니까?

inputbox 2020. 12. 27. 10:48
반응형

int8_t, int_least8_t 및 int_fast8_t의 차이점은 무엇입니까?


무엇 INT 유형 사이의 차이는 int8_t, int_least8_t그리고 int_fast8_t?


차이는 Carl Norum이 인용 한 C99 표준의 섹션에서 정의됩니다. 그러나 예가 있으면 유용 할 수 있습니다.

char= 9 비트, short= 18 비트, int= 36 비트 및 long= 72 비트 의 36 비트 시스템 용 C 컴파일러가 있다고 가정하십시오 . 그때

  • int8_t 패딩없이 정확히 8 개의 값 비트를 갖는 제약 조건을 충족시킬 방법이 없기 때문에 존재하지 않습니다 .
  • int_least8_t의 typedef입니다 char. short또는의 아님 int. 표준에는 최소 8 비트 가장 작은 유형이 필요하기 때문 입니다.
  • int_fast8_t무엇이든 될 수 있습니다. int"기본"크기가 "빠른"것으로 간주되는 경우 typedef 일 가능성이 높습니다 .

사양 섹션 7.8.1.1 정확한 너비 정수 유형 , 단락 1 :

typedef 이름 N 은 너비 N, 패딩 비트 없음 및 2의 보수 표현을 갖는 부호있는 정수 유형을 지정합니다. 따라서 너비가 정확히 8 비트 인 부호있는 정수 유형을 나타냅니다.int_tint8_t

그리고 from : 7.18.1.2 최소 너비 정수 유형 , 단락 1 :

typedef 이름 N 은 너비가 N 이상인 부호있는 정수 유형을 지정하므로 크기가 더 작은 부호있는 정수 유형은 최소한 지정된 너비를 갖지 않습니다. 따라서 너비가 32 비트 이상인 부호있는 정수 유형을 나타냅니다.int_least_tint_least32_t

마지막으로 7.18.1.3에서 가장 빠른 최소 너비 정수 유형 , 단락 2 :

typedef 이름 N 은 너비가 N 이상인 가장 빠른 부호있는 정수 유형을 지정합니다 . typedef 이름 N 은 너비가 N 이상인 가장 빠른 부호없는 정수 유형을 지정합니다.int_fast_tuint_fast_t


intN_t(및 uintN_t) 모든 C99 구현에서 필수아닙니다 . 이러한 유형은 "정확한 너비 정수 유형"입니다. 그것들을 가지고있는 것이 합리적 일 경우 (기본적으로 모든 데스크톱 컴퓨터) 구현에 필요합니다.

int_leastN_t 8, 16, 32 및 64의 N 값에 대해 모든 C99 구현에 필요합니다. 이것이 "최소 너비 정수 유형"입니다.

int_fastN_t 8, 16, 32 및 64의 N 값에 대해 모든 C99 구현에 필요합니다. 이것은 "가장 빠른 최소 너비 정수 유형"입니다.


여기 개념적 간단한 응답의 모든 세 가지 유형의 INT * N_t의 폭> = N. intN_t을 가지고 있어야 정확하게 int_leastN_t는이고, N 비트를 상기 (좁은) 그러한 종류 및 int_fastN_t는이고 빠른 이러한 유형.

예를 들어, 8 비트 바이트 및 32 비트 고속 레지스터가있는 시스템에서 int8_t 및 int_least8_t는 부호있는 char로 별칭이 지정되지만 int_fast8_t는 int32_t로 별칭이 지정됩니다. 반면 구현에서 정의하기로 선택한 경우 int_least24_t 및 int_fast24_t는 모두 int32_t로 별칭이 지정되고 int24_t는 정의되지 않은 상태로 유지됩니다.

편집 : Technophile가 아래에서 지적했듯이 빠른 유형의 실제 문제는 레지스터가 아니라 메모리입니다 (일반적으로 레지스터의 하위 비트에 대한 작업은 전체 레지스터 에서처럼 빠르게 수행 될 수 있음). 예를 들어, 메모리에있는 int8_t에 쓰려면 그것을 포함하는 32 비트 워드를로드하고, 바이트 만 수정 한 다음 다시 쓰는 것이 필요할 수 있지만, 32 워드로 저장된 경우 읽지 않고 쓸 수 있습니다.


이것들은 정수의 크기와 관련이 있으며 소리가 나는 것과 같습니다.

int8_t is exactly 8 bits
int_least8_t is the smallest int type that has at least 8 bits
int_fast8_t is the fastest int type that has at least 8 bits.

참조 URL : https://stackoverflow.com/questions/5254051/the-difference-of-int8-t-int-least8-t-and-int-fast8-t

반응형