定宽整数类型 (C99 起)
来自cppreference.com
类型
在标头
<stdint.h> 定义 | |
int8_t int16_t int32_t int64_t
|
分别是宽度正好是 8、16、32 和 64 位的有符号整数类型 无填充位并对负值使用补码 (只有在实现直接支持该类型时才会提供) |
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
|
分别是宽度至少有 8、16、32 和 64 位的最快的有符号整数类型 |
int_least8_t int_least16_t int_least32_t int_least64_t
|
分别是宽度至少有 8、16、32 和 64 位的最小的有符号整数类型 |
intmax_t
|
最大宽度的有符号整数类型 |
intptr_t
|
足以保有指针的整数类型 |
uint8_t uint16_t uint32_t uint64_t
|
分别是宽度正好是 8、16、32 和 64 位的无符号整数类型 (只有在实现直接支持该类型时才会提供) |
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
|
分别是宽度至少有 8、16、32 和 64 位的最快的无符号整数类型 |
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
|
分别是宽度至少有 8、16、32 和 64 位的最小的无符号整数类型 |
uintmax_t
|
最大宽度的无符号整数类型 |
uintptr_t
|
足以保有指针的无符号整数类型 |
实现可在 N 不是 8、 16、 32 或 64 时定义 typedef 名 intN_t
、int_fastN_t
、int_leastN_t
、uintN_t
、uint_fastN_t
及 uint_leastN_t
。形为 intN_t
的 typedef 名,可能仅当实现支持有该宽度而无填充的整数类型才得以定义。因此,uint24_t 代表宽度严格为 24 位的无符号整数类型。
下面列出的每个宏当且仅当实现定义对应的 typedef 名时才得以定义。宏 INTN_C
与 UINTN_C
分别对应 typedef 名 int_leastN_t
与 uint_leastN_t
。
宏常量
在标头
<stdint.h> 定义 | |
有符号整数:宽度 | |
INT8_WIDTHINT16_WIDTHINT32_WIDTHINT64_WIDTH (C23)(可选) |
int8_t、int16_t、int32_t、int64_t 类型对象的位宽(恰好为 8、16、32、64) (宏常量) |
INT_FAST8_WIDTHINT_FAST16_WIDTHINT_FAST32_WIDTHINT_FAST64_WIDTH (C23) |
int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t 类型对象的位宽 (宏常量) |
INT_LEAST8_WIDTHINT_LEAST16_WIDTHINT_LEAST32_WIDTHINT_LEAST64_WIDTH (C23) |
int_least8_t、int_least16_t、int_least32_t、int_least64_t 类型对象的位宽 (宏常量) |
INTPTR_WIDTH (C23)(可选) |
intptr_t 类型对象的位宽 (宏常量) |
INTMAX_WIDTH (C23) |
intmax_t 类型对象的位宽 (宏常量) |
有符号整数:最小值 | |
INT8_MININT16_MININT32_MININT64_MIN |
int8_t、int16_t、int32_t、int64_t 类型对象的最小值 (宏常量) |
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN |
int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t 类型对象的最小值 (宏常量) |
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_LEAST64_MIN |
int_least8_t、int_least16_t、int_least32_t、int_least64_t 类型对象的最小值 (宏常量) |
INTPTR_MIN |
intptr_t 类型对象的最小值 (宏常量) |
INTMAX_MIN |
intmax_t 类型对象的最小值 (宏常量) |
有符号整数:最大值 | |
INT8_MAXINT16_MAXINT32_MAXINT64_MAX |
int8_t、int16_t、int32_t、int64_t 类型对象的最大值 (宏常量) |
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX |
int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t 类型对象的最大值 (宏常量) |
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_LEAST64_MAX |
int_least8_t、int_least16_t、int_least32_t、int_least64_t 类型对象的最大值 (宏常量) |
INTPTR_MAX |
intptr_t 类型对象的最大值 (宏常量) |
INTMAX_MAX |
intmax_t 类型对象的最大值 (宏常量) |
无符号整数:宽度 | |
UINT8_WIDTHUINT16_WIDTHUINT32_WIDTHUINT64_WIDTH (C23)(可选) |
uint8_t、uint16_t、uint32_t、uint64_t 类型对象的位宽(恰好为 8、16、32、64) (宏常量) |
UINT_FAST8_WIDTHUINT_FAST16_WIDTHUINT_FAST32_WIDTHUINT_FAST64_WIDTH (C23) |
uint_fast8_t、uint_fast16_t、uint_fast32_t、uint_fast64_t 类型对象的位宽 (宏常量) |
UINT_LEAST8_WIDTHUINT_LEAST16_WIDTHUINT_LEAST32_WIDTHUINT_LEAST64_WIDTH (C23) |
uint_least8_t、uint_least16_t、uint_least32_t、uint_least64_t 类型对象的位宽 (宏常量) |
UINTPTR_WIDTH (C23)(可选) |
uintptr_t 类型对象的位宽 (宏常量) |
UINTMAX_WIDTH (C23) |
uintmax_t 类型对象的位宽 (宏常量) |
无符号整数:最大值 | |
UINT8_MAXUINT16_MAXUINT32_MAXUINT64_MAX |
uint8_t、uint16_t、uint32_t、uint64_t 类型对象的最大值 (宏常量) |
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX |
uint_fast8_t、uint_fast16_t、uint_fast32_t、uint_fast64_t 类型对象的最大值 (宏常量) |
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_LEAST64_MAX |
uint_least8_t、uint_least16_t、uint_least32_t、uint_least64_t 类型对象的最大值 (宏常量) |
UINTPTR_MAX |
uintptr_t 类型对象的最大值 (宏常量) |
UINTMAX_MAX |
uintmax_t 类型对象的最大值 (宏常量) |
最小宽度整数常量的函数宏
INT8_CINT16_CINT32_CINT64_C |
展开成拥有以其实参指定的值的整数常量表达式,其类型分别为 int_least8_t、int_least16_t、int_least32_t、int_least64_t (宏函数) |
INTMAX_C |
展开成拥有以其实参指定的值的整数常量表达式,其类型为 intmax_t (宏函数) |
UINT8_CUINT16_CUINT32_CUINT64_C |
展开成拥有以其实参指定的值的整数常量表达式,其类型分别为 uint_least8_t、uint_least16_t、uint_least32_t、uint_least64_t (宏函数) |
UINTMAX_C |
展开成拥有以其实参指定的值的整数常量表达式,其类型为 uintmax_t (宏函数) |
#include <stdint.h> UINT64_C(0x123) // 可能展开成 0x123ULL 或 0x123UL
格式宏常量
在标头
<inttypes.h> 定义 |
fprintf 系列函数的格式常量
此处列出的每个 PRI
宏当且仅当实现定义对应的 typedef 名才得以定义。
int 或 unsigned int 的等价物 |
描述 | 数据类型的宏 | ||||
---|---|---|---|---|---|---|
[u]intx_t |
[u]int_leastx_t |
[u]int_fastx_t |
[u]intmax_t |
[u]intptr_t | ||
d
|
输出有符号十进制整数值 | PRIdx | PRIdLEASTx | PRIdFASTx | PRIdMAX | PRIdPTR |
i
|
PRIix | PRIiLEASTx | PRIiFASTx | PRIiMAX | PRIiPTR | |
u
|
输出无符号十进制整数值 | PRIux | PRIuLEASTx | PRIuFASTx | PRIuMAX | PRIuPTR |
o
|
输出无符号八进制整数值 | PRIox | PRIoLEASTx | PRIoFASTx | PRIoMAX | PRIoPTR |
x
|
输出无符号小写十六进制整数值 | PRIxx | PRIxLEASTx | PRIxFASTx | PRIxMAX | PRIxPTR |
X
|
输出无符号大写十六进制整数值 | PRIXx | PRIXLEASTx | PRIXFASTx | PRIXMAX | PRIXPTR |
fscanf 系列函数的格式常量
此处列出的每个 SCN
宏当且仅当实现定义对应的 typedef 名且拥有适合该类型的 fscanf 长度修饰符才得以定义。
int 或 unsigned int 的等价物 |
描述 | 数据类型的宏 | ||||
---|---|---|---|---|---|---|
[u]intx_t |
[u]int_leastx_t |
[u]int_fastx_t |
[u]intmax_t |
[u]intptr_t | ||
d
|
输入有符号十进制整数值 | SCNdx | SCNdLEASTx | SCNdFASTx | SCNdMAX | SCNdPTR |
i
|
输入有符号整数值(以剖析的首个字符确定基数) | SCNix | SCNiLEASTx | SCNiFASTx | SCNiMAX | SCNiPTR |
u
|
输入无符号十进制整数值 | SCNux | SCNuLEASTx | SCNuFASTx | SCNuMAX | SCNuPTR |
o
|
输入无符号八进制整数值 | SCNox | SCNoLEASTx | SCNoFASTx | SCNoMAX | SCNoPTR |
x
|
输入无符号十六进制整数值 | SCNxx | SCNxLEASTx | SCNxFASTx | SCNxMAX | SCNxPTR |
示例
运行此代码
可能的输出:
8 lld -9223372036854775808 +9223372036854775807 +7
引用
- C23 标准(ISO/IEC 9899:2024):
- 7.8.1 Macros for format specifiers (第 TBD 页)
- 7.18 Integer types <stdint.h> (第 TBD 页)
- C17 标准(ISO/IEC 9899:2018):
- 7.8.1 Macros for format specifiers (第 158-159 页)
- 7.18 Integer types <stdint.h> (第 212-216 页)
- C11 标准(ISO/IEC 9899:2011):
- 7.8.1 Macros for format specifiers (第 217-218 页)
- 7.18 Integer types <stdint.h> (第 289-295 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.8.1 Macros for format specifiers (第 198-199 页)
- 7.18 Integer types <stdint.h> (第 255-261 页)