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