60-精确宽度类型
B.6.1 精确宽度类型
typedef 标识了一组精确宽度的类型,通用形式是 intN_t (有符号类型)和 uintN_t (无符号类型),其中 N 表示位数(即类型的宽度)。但是要注意,不是所有的系统都支持所有的这些类型。例如,最小可用内存大小是 16 位的系统就不支持 int8_t 和 uint8_t 类型。格式宏可以使用 d 或 i 表示有符号类型,所以 PRIi8 和 SCNi8 都有效。对于无符号类型,可以使用 o 、 x 或 u 以获得 %o 、 %x 或 %X 转换说明来代替 %u 。例如,可以使用 PRIX32 以十六进制格式打印 uint32_t 类型的值。表B.6.1列出了精确宽度类型、格式说明符和最小值、最大值。
| 类型名 | printf() 说明符 | scanf() 说明符 | 最小值 | 最大值 |
| :----- | :----- | :----- | :----- | :----- | :----- | :----- |
| int8_t | PRId8 | SCNd8 | INT8_MIN | INT8_MAX |
| int16_t | PRId16 | SCNd16 | INT16_MIN | INT16_MAX |
| int32_t | PRId32 | SCNd32 | INT32_MIN | INT32_MAX |
| int64_t | PRId64 | SCNd64 | INT64_MIN | INT64_MAX |
| uint8_t | PRIu8 | SCNu8 | 0 | UINT8_MAX |
| uint16_t | PRIu16 | SCNu16 | 0 | UINT16_MAX |
| uint32_t | PRIu32 | SCNu32 | 0 | UINT32_MAX |
| uint64_t | PRIu64 | SCNu64 | 0 | UINT64_MAX |