[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비트일겁니다.
그러면
-
int8_t는 존재하지 않을 겁니다. 패딩 없이 정확하게 8비트값을 가진다는 제약을 만족할 수가 없으니까요.
-
int_least8_t는 char의 typedef가 됩니다. short나 int가 아닙니다.
이건 표준에서 최소 8비트의 크기를 가지는 가장 작은 타입을 요구하거든요. -
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의 폭을 가지며 가장 빠른 부호없는 정수 타입으로 지정됩니다.