整数类型的宽度定义为表示此整型值所使用的位的个数,包括符号位,典型的宽度有8、16、32、64位。例如,int类型的宽度至少为16位。
在C99中,头文件stdint.h定义了整数类型的宽度,这些类型列举在Table 2-5.中,其中以u开头的表示unsigned.下表中不是C99要求必须提供的使用”optional”标记。
Table 2-5. Integer types with defined width
类型 |
含义 |
执行 |
intN_t uintN_t |
宽度为N位的整型 |
optional |
Int_leastN_t Uint_leastN_t |
宽度至少为N位的整形 |
要求N=8、16、32、64 |
Int_fastN_t uint_fastN_t |
宽度至少为N位的fast类型 |
要求N=8、16、32、64 |
Intmax_t Uintmax_t |
最大的宽度 |
要求 |
Intptr_t Uintptr_t |
宽度可以存储一个指针的整型 |
optional |
例如,int_least64_t和uint_least64_t都是宽度至少为64位的整型,如果可选的有符号类型(不带前缀u)被定义,相应地,也要求无符号类型(带有前缀u)也要求被定义,反之亦然。下面的例子中定义和初始化了一个元素为int_fast32_t类型的数据。
Table 2-4中列举的类型通常为已存在标准库的同义词,例如,一个C编译器在stdint.h中有下面语句:
typedef signed char int_fast8_t;
这个声明将int_fast8_t定义为等价的signed char.此外,有的实现也可能定义如int24_t或uint_least128_t等扩展类型。
有符号类型intN_t具有一个特性,它们必须使用2的补码来表示,所以,它们的最小值为-2,最大值为2N-1 – 1。
Stdint.h中定义的类型的范围也很好获得,这个文件中也定义了获取最大值和最小值的宏,宏的名子使用大写字母,将类型中的_t命使用_MAX或_MIN替代,例如,下例中使用最小值初始化了变量i64:
int_least64_t i64 = INT_LEAST64_MIN;
头文件inttypes.h包含了stdint.h,它提供了其他的一些特性,例如扩展整型在函数printf()和scanf()中的使用。