Fixed width integer types (since C++11)
目录 |
类型
|
定义于头文件
<cstdint>
|
|
|
int8_t
int16_t
int32_t
int64_t
(可选)
|
宽度恰好为8、16、32和64位的有符号整数类型
无填充位且使用二进制补码表示负值 (当且仅当实现直接支持该类型时提供) (typedef) |
|
int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
|
宽度至少为8、16、32和64位的最快有符号整数类型
(typedef) |
|
int_least8_t
int_least16_t
int_least32_t
int_least64_t
|
宽度至少为8、16、32和64位的最小有符号整数类型
(typedef) |
|
intmax_t
|
最大宽度的有符号整数类型
(typedef) |
|
intptr_t
(可选)
|
能够容纳
void
指针的有符号整数类型
(typedef) |
|
uint8_t
uint16_t
uint32_t
uint64_t
(可选)
|
宽度恰好为8、16、32和64位的无符号整数类型
(当且仅当实现直接支持该类型时提供) (typedef) |
|
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t
|
宽度至少为8、16、32和64位的最快无符号整数类型
(typedef) |
|
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t
|
宽度至少为8、16、32和64位的最小无符号整数类型
(typedef) |
|
uintmax_t
|
最大宽度的无符号整数类型
(typedef) |
|
uintptr_t
(可选)
|
能够容纳
void
指针的无符号整数类型
(typedef) |
实现可以定义类型别名
int
N
_t
、
int_fast
N
_t
、
int_least
N
_t
、
uint
N
_t
、
uint_fast
N
_t
和
uint_least
N
_t
,其中
N
不是 8、16、32 或 64。仅当实现支持具有无填充位的该宽度整数类型时,才能定义
int
N
_t
形式的类型别名。因此,
std::uint24_t
表示一个宽度恰好为 24 位的无符号整数类型。
以下列出的每个宏,当且仅当实现定义了对应的类型定义名称时才会被定义。宏
INT
N
_C
和
UINT
N
_C
分别对应于类型定义名称
int_least
N
_t
和
uint_least
N
_t
。
宏常量
|
定义于头文件
<cstdint>
|
|
有符号整数:最小值 |
|
|
INT8_MIN
INT16_MIN
INT32_MIN
INT64_MIN
(可选)
|
std::int8_t
、
std::int16_t
、
std::int32_t
和
std::int64_t
的最小值
(宏常量) |
|
INT_FAST8_MIN
INT_FAST16_MIN
INT_FAST32_MIN
INT_FAST64_MIN
|
std::int_fast8_t
、
std::int_fast16_t
、
std::int_fast32_t
和
std::int_fast64_t
的最小值
(宏常量) |
|
INT_LEAST8_MIN
INT_LEAST16_MIN
INT_LEAST32_MIN
INT_LEAST64_MIN
|
std::int_least8_t
、
std::int_least16_t
、
std::int_least32_t
和
std::int_least64_t
的最小值
(宏常量) |
|
INTPTR_MIN
(可选)
|
std::intptr_t
的最小值
(宏常量) |
|
INTMAX_MIN
|
std::intmax_t
的最小值
(宏常量) |
有符号整数:最大值 |
|
|
INT8_MAX
INT16_MAX
INT32_MAX
INT64_MAX
(可选)
|
std::int8_t
、
std::int16_t
、
std::int32_t
和
std::int64_t
的最大值
(宏常量) |
|
INT_FAST8_MAX
INT_FAST16_MAX
INT_FAST32_MAX
INT_FAST64_MAX
|
std::int_fast8_t
、
std::int_fast16_t
、
std::int_fast32_t
和
std::int_fast64_t
的最大值
(宏常量) |
|
INT_LEAST8_MAX
INT_LEAST16_MAX
INT_LEAST32_MAX
INT_LEAST64_MAX
|
std::int_least8_t
、
std::int_least16_t
、
std::int_least32_t
和
std::int_least64_t
的最大值
(宏常量) |
|
INTPTR_MAX
(可选)
|
std::intptr_t
的最大值
(宏常量) |
|
INTMAX_MAX
|
std::intmax_t
的最大值
(宏常量) |
无符号整数:最大值 |
|
|
UINT8_MAX
UINT16_MAX
UINT32_MAX
UINT64_MAX
(可选)
|
std::uint8_t
、
std::uint16_t
、
std::uint32_t
和
std::uint64_t
的最大值
(宏常量) |
|
UINT_FAST8_MAX
UINT_FAST16_MAX
UINT_FAST32_MAX
UINT_FAST64_MAX
|
std::uint_fast8_t
、
std::uint_fast16_t
、
std::uint_fast32_t
和
std::uint_fast64_t
的最大值
(宏常量) |
|
UINT_LEAST8_MAX
UINT_LEAST16_MAX
UINT_LEAST32_MAX
UINT_LEAST64_MAX
|
std::uint_least8_t
、
std::uint_least16_t
、
std::uint_least32_t
和
std::uint_least64_t
的最大值
(宏常量) |
|
UINTPTR_MAX
(可选)
|
std::uintptr_t
的最大值
(宏常量) |
|
UINTMAX_MAX
|
std::uintmax_t
的最大值
(宏常量) |
用于最小宽度整型常量的函数宏
|
INT8_C
INT16_C
INT32_C
INT64_C
|
展开为具有指定值的整型常量表达式,其类型分别为
std::int_least8_t
、
std::int_least16_t
、
std::int_least32_t
和
std::int_least64_t
的
提升后类型
(函数宏) |
|
INTMAX_C
|
展开为具有指定值且类型为
std::intmax_t
的整型常量表达式
(函数宏) |
|
UINT8_C
UINT16_C
UINT32_C
UINT64_C
|
展开为具有指定值的整型常量表达式,其类型分别为
std::uint_least8_t
、
std::uint_least16_t
、
std::uint_least32_t
和
std::uint_least64_t
的
提升后类型
(函数宏) |
|
UINTMAX_C
|
展开为具有指定值且类型为
std::uintmax_t
的整型常量表达式
(函数宏) |
#include <cstdint> UINT64_C(0x123) // 扩展为类型 uint_least64_t 且值为 0x123 的字面量
格式宏常量
|
定义于头文件
<cinttypes>
|
用于 std::fprintf 系列函数的格式常量
此处列出的每个
PRI
宏,当且仅当实现定义了对应的类型定义名称时才会被定义。
|
对应
int 或 unsigned int 的等效类型 |
描述 | 数据类型宏 | ||||
|---|---|---|---|---|---|---|
std::int
x
_t
|
std::int_least
x
_t
|
std::int_fast
x
_t
|
std::intmax_t
|
std::intptr_t
|
||
d
|
输出有符号十进制整数值 | PRId x | PRIdLEAST x | PRIdFAST x | PRIdMAX | PRIdPTR |
i
|
PRIi x | PRIiLEAST x | PRIiFAST x | PRIiMAX | PRIiPTR | |
u
|
输出无符号十进制整数值 | PRIu x | PRIuLEAST x | PRIuFAST x | PRIuMAX | PRIuPTR |
o
|
输出无符号八进制整数值 | PRIo x | PRIoLEAST x | PRIoFAST x | PRIoMAX | PRIoPTR |
x
|
输出无符号小写十六进制整数值 | PRIx x | PRIxLEAST x | PRIxFAST x | PRIxMAX | PRIxPTR |
X
|
输出无符号大写十六进制整数值 | PRIX x | PRIXLEAST x | PRIXFAST x | PRIXMAX | PRIXPTR |
用于 std::fscanf 系列函数的格式常量
此处列出的每个
SCN
宏当且仅当实现定义了对应的类型别名且具有适用于该类型的合适
std::fscanf
长度修饰符时才会被定义。
|
对应
int 或 unsigned int 的等效类型 |
描述 | 数据类型宏 | ||||
|---|---|---|---|---|---|---|
std::int
x
_t
|
std::int_least
x
_t
|
std::int_fast
x
_t
|
std::intmax_t
|
std::intptr_t
|
||
d
|
有符号十进制整数值输入 | SCNd x | SCNdLEAST x | SCNdFAST x | SCNdMAX | SCNdPTR |
i
|
有符号整数值输入 | SCNi x | SCNiLEAST x | SCNiFAST x | SCNiMAX | SCNiPTR |
u
|
无符号十进制整数值输入 | SCNu x | SCNuLEAST x | SCNuFAST x | SCNuMAX | SCNuPTR |
o
|
无符号八进制整数值输入 | SCNo x | SCNoLEAST x | SCNoFAST x | SCNoMAX | SCNoPTR |
x
|
无符号十六进制整数值输入 | SCNx x | SCNxLEAST x | SCNxFAST x | SCNxMAX | SCNxPTR |
注释
由于 C++ 会将紧接在字符串字面量后的字符解析为
用户定义字符串字面量
,因此诸如
printf
(
"%"
PRId64
"
\n
"
,n
)
;
的 C 代码在 C++ 中无效,需要在
PRId64
前添加空格。
C99标准建议,除非在包含相关C头文件(
stdint.h
或
inttypes.h
)之前已定义宏
__STDC_LIMIT_MACROS
、
__STDC_CONSTANT_MACROS
或
__STDC_FORMAT_MACROS
(分别对应),否则C++实现不应定义上述限制、常量或格式宏。该建议未被任何C++标准采纳,并在C11中被移除。然而,部分实现(如glibc 2.17)仍尝试遵循此规则,此时可能需要定义
__STDC
宏;C++编译器可能会尝试通过在某些情况下自动定义这些宏来解决该问题。
std::int8_t
可能是
signed
char
而
std::uint8_t
可能是
unsigned
char
,但两者都不能是
char
(无论其符号性如何,因为
char
不被视为“有符号整数类型”或“无符号整数类型”)。
示例
#include <cinttypes> #include <cstdio> int main() { std::printf("%zu\n", sizeof(std::int64_t)); std::printf("%s\n", PRId64); std::printf("%+" PRId64 "\n", INT64_MIN); std::printf("%+" PRId64 "\n", INT64_MAX); std::int64_t n = 7; std::printf("%+" PRId64 "\n", n); }
可能的输出:
8 lld -9223372036854775808 +9223372036854775807 +7
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2820 | C++11 | 可选类型定义名称和宏的要求与C语言不一致 | 已调整为一致 |
参考文献
- C++23 标准 (ISO/IEC 14882:2024):
-
- 17.4.1 头文件 <cstdint> 概要 [cstdint.syn]
-
- 31.13.2 头文件 <cinttypes> 概要 [cinttypes.syn]
- C++20 标准 (ISO/IEC 14882:2020):
-
- 17.4 整数类型 [cstdint]
-
- 29.12.2 头文件 <cinttypes> 概要 [cinttypes.syn]
- C++17 标准 (ISO/IEC 14882:2017):
-
- 21.4 整数类型 [cstdint]
-
- 30.11.2 头文件 <cinttypes> 概要 [cinttypes.syn]
- C++14 标准 (ISO/IEC 14882:2014):
-
- 18.4 整数类型 [cstdint]
-
- 27.9.2 C 库文件 [c.files]
- C++11 标准 (ISO/IEC 14882:2011):
-
- 18.4 整数类型 [cstdint]
-
- 27.9.2 C 库文件 [c.files]
参见
|
C 文档
关于
固定宽度整数类型
|