命名空间
变体
操作

固定宽度整数类型 (自 C++11 起)

来自 cppreference.com
< cpp‎ | 类型
 
 
实用程序库
语言支持
类型支持(基本类型、RTTI)
库功能测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
类型支持
基本类型
固定宽度整数类型 (C++11)
固定宽度浮点数类型 (C++23)
(C++11)    
(C++17)
数值限制
C 数值限制接口
运行时类型信息
 

内容

[编辑] 类型

在头文件 <cstdint> 中定义
int8_tint16_tint32_tint64_t
(可选)
分别具有 8、16、32 和 64 位宽度的带符号整数类型
没有填充位,使用 2 的补码表示负值
(仅当实现直接支持该类型时才提供)
(typedef) [编辑]
int_fast8_tint_fast16_tint_fast32_tint_fast64_t
最快的带符号整数类型,宽度至少为 8、16、32 和 64 位
(typedef) [编辑]
int_least8_tint_least16_tint_least32_tint_least64_t
最小的带符号整数类型,宽度至少为 8、16、32 和 64 位
(typedef) [编辑]
intmax_t
最大宽度带符号整数类型
(typedef) [编辑]
intptr_t
(可选)
能够保存指向 void 的指针的带符号整数类型
(typedef) [编辑]
uint8_tuint16_tuint32_tuint64_t
(可选)
分别具有 8、16、32 和 64 位宽度的无符号整数类型
(仅当实现直接支持该类型时才提供)
(typedef) [编辑]
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t
最快的无符号整数类型,宽度至少为 8、16、32 和 64 位
(typedef) [编辑]
uint_least8_tuint_least16_tuint_least32_tuint_least64_t
最小的无符号整数类型,宽度至少为 8、16、32 和 64 位
(typedef) [编辑]
uintmax_t
最大宽度无符号整数类型
(typedef) [编辑]
uintptr_t
(可选)
能够保存指向 void 的指针的无符号整数类型
(typedef) [编辑]

实现可以定义 typedef 名字 intN_tint_fastN_tint_leastN_tuintN_tuint_fastN_tuint_leastN_t,其中 N 不为 8、16、32 或 64。仅当实现支持具有该宽度且没有填充位的整数类型时,才能定义形式为 intN_t 的 typedef 名字。因此,std::uint24_t 表示宽度正好为 24 位的无符号整数类型。

下面列出的每个宏仅当实现定义了相应的 typedef 名字时才会定义。宏 INTN_CUINTN_C 分别对应于 typedef 名字 int_leastN_tuint_leastN_t

[编辑] 宏常量

在头文件 <cstdint> 中定义
带符号整数:最小值
INT8_MININT16_MININT32_MININT64_MIN
(可选)
分别为 std::int8_tstd::int16_tstd::int32_tstd::int64_t 的最小值
(宏常量) [编辑]
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN
分别为 std::int_fast8_tstd::int_fast16_tstd::int_fast32_tstd::int_fast64_t 的最小值
(宏常量) [编辑]
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_LEAST64_MIN
分别为 std::int_least8_tstd::int_least16_tstd::int_least32_tstd::int_least64_t 的最小值
(宏常量) [编辑]
INTPTR_MIN
(可选)
std::intptr_t 的最小值
(宏常量) [编辑]
INTMAX_MIN
std::intmax_t 的最小值
(宏常量) [编辑]
带符号整数:最大值
INT8_MAXINT16_MAXINT32_MAXINT64_MAX
(可选)
分别为 std::int8_tstd::int16_tstd::int32_tstd::int64_t 的最大值
(宏常量) [编辑]
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX
分别为 std::int_fast8_tstd::int_fast16_tstd::int_fast32_tstd::int_fast64_t 的最大值
(宏常量) [编辑]
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_LEAST64_MAX
分别为 std::int_least8_tstd::int_least16_tstd::int_least32_tstd::int_least64_t 的最大值
(宏常量) [编辑]
INTPTR_MAX
(可选)
std::intptr_t 的最大值
(宏常量) [编辑]
INTMAX_MAX
std::intmax_t 的最大值
(宏常量) [编辑]
无符号整数:最大值
UINT8_MAXUINT16_MAXUINT32_MAXUINT64_MAX
(可选)
分别为 std::uint8_tstd::uint16_tstd::uint32_tstd::uint64_t 的最大值
(宏常量) [编辑]
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX
分别为 std::uint_fast8_tstd::uint_fast16_tstd::uint_fast32_tstd::uint_fast64_t 的最大值
(宏常量) [编辑]
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_LEAST64_MAX
分别为 std::uint_least8_tstd::uint_least16_tstd::uint_least32_tstd::uint_least64_t 的最大值
(宏常量) [编辑]
UINTPTR_MAX
(可选)
std::uintptr_t 的最大值
(宏常量) [编辑]
UINTMAX_MAX
std::uintmax_t 的最大值
(宏常量) [编辑]

[编辑] 最小宽度整数常量的函数宏

INT8_CINT16_CINT32_CINT64_C
分别扩展为一个整数常量表达式,其值为其参数指定的值,其类型为 std::int_least8_tstd::int_least16_tstd::int_least32_tstd::int_least64_t提升 类型
(函数宏) [编辑]
INTMAX_C
扩展为一个整数常量表达式,其值为其参数指定的值,其类型为 std::intmax_t
(函数宏) [编辑]
UINT8_CUINT16_CUINT32_CUINT64_C
分别扩展为一个整数常量表达式,其值为其参数指定的值,其类型为 std::uint_least8_tstd::uint_least16_tstd::uint_least32_tstd::uint_least64_t提升 类型
(函数宏) [编辑]
UINTMAX_C
扩展为一个整数常量表达式,其值为其参数指定的值,其类型为 std::uintmax_t
(函数宏) [编辑]
#include <cstdint>
UINT64_C(0x123) // expands to a literal of type uint_least64_t and value 0x123

[编辑] 格式宏常量

在头文件 <cinttypes> 中定义

[编辑] 用于 std::fprintf 函数系列的格式常量

此处列出的每个 PRI 宏仅当实现定义了相应的 typedef 名称时才定义。

等效
对于 int
unsigned int
描述 数据类型的宏




std::intx_t




std::int_leastx_t
std::int_fastx_t
std::intmax_t
std::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

[编辑] 用于 std::fscanf 函数系列的格式常量

此处列出的每个 SCN 宏仅当实现定义了相应的 typedef 名称并且该类型具有合适的 std::fscanf 长度修饰符时才定义。

等效
对于 int
unsigned int
描述 数据类型的宏




std::intx_t




std::int_leastx_t
std::int_fastx_t
std::intmax_t
std::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

[编辑] 备注

由于 C++ 将字符串文字后面的字符解释为 用户定义的字符串文字,因此像 printf("%"PRId64"\n",n); 这样的 C 代码在 C++ 中是无效的,需要在 PRId64 之前添加空格。

C99 标准建议 C++ 实现不应定义上述限制、常量或格式宏,除非在包含相关 C 头文件(stdint.hinttypes.h)之前定义宏 __STDC_LIMIT_MACROS__STDC_CONSTANT_MACROS__STDC_FORMAT_MACROS(分别对应)。此建议未被任何 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++ 标准。

DR 应用于 发布的行为 正确行为
LWG 2820 C++11 可选 typedef 名称和宏的要求与 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 文档 用于 固定宽度整数类型