[C] Q: int8_t, int_least8_t, int_fast8_t의 차이가 뭔가요? (번역)

[원본 링크]

원본
https://stackoverflow.com/questions/5254051/the-difference-of-int8-t-int-least8-t-and-int-fast8-t


질문
C의 정수타입 int8_t, int_least8_t, int_fast8_t의 차이가 뭔가요?



답1(by dan04)
그것들의 차이는 아래 답변의 Carl Norum이 인용한 C99 표준 섹션에서 정의됩니다.
그래도 예시를 드는 게 쉽겠죠?

36비트 시스템의 C 컴파일러를 사용한다 칩시다. char = 9비트, short = 18비트, int = 36비트, long = 72비트일겁니다.

그러면

  1. int8_t는 존재하지 않을 겁니다. 패딩 없이 정확하게 8비트값을 가진다는 제약을 만족할 수가 없으니까요.

  2. int_least8_t는 char의 typedef가 됩니다. short나 int가 아닙니다.
    이건 표준에서 최소 8비트의 크기를 가지는 가장 작은 타입을 요구하거든요.

  3. int_fast8_t는 뭐든 될 수 있습니다.
    int의 typedef가 될 수도 있죠. 해당 환경에서 그게 제일 빠르다면요.



**답2(by Carl Norum) **
스펙 섹션 7.8.1.1의 Exact-width integer types, paragraph 1을 봅시다.

typedef된 이름인  intN_t는 폭 N짜리의 부호있는 정수 타입으로 지정됩니다. 패딩 비트가 없으며, 2의 보수 표현인 걸로요.
그래서 int8_t는 정확하게 8비트 폭을 갖는 부호있는 정수 타입을 의미합니다.


그리고 7.18.1.2의 Minimum-width integer types, paragraph 1을 봅시다.

typedef된 이름 int_leastN_t는 최소한 N의 크기를 가지는 부호있는 정수 타입으로 지정될겁니다. 지정된 폭보다 작은 크기의 타입이 될 수 없어요.
따라서 int_least32_t는 최소 32비트의 폭을 가지는 부호있는 정수타입이 될겁니다.


마지막으로 7.18.1.3 Fastest minimum-width integer types, paragraph 2를 봅시다.

typedef된 이름인 int_fastN_t는 최소 N의 폭을 가지며, 가장 빠른 부호있는 정수 타입을 지정됩니다.
그리고 typedef된 이름 uint_fastN_t는 최소 N의 폭을 가지며 가장 빠른 부호없는 정수 타입으로 지정됩니다.