Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

目录

类型

定义于头文件 <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 文档 关于 固定宽度整数类型