命名空间
变体
操作

固定宽度整数类型 (自 C99 起)

来自 cppreference.com
< c‎ | 类型

内容

[编辑] 类型

在头文件 <stdint.h> 中定义
int8_t
int16_t
int32_t
int64_t
宽度分别为
正好 8、16、32 和 64 位的有符号整数类型
没有填充位,使用 2 的补码表示负值
(仅当实现直接支持该类型时才提供)
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 能够保存指针的无符号整数类型

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

下面列出的每个宏仅当且仅当实现定义了相应的类型定义名称时才定义。宏 INTN_CUINTN_C 分别对应于类型定义名称 int_leastN_tuint_leastN_t

[编辑] 宏常量

在头文件 <stdint.h> 中定义
有符号整数 : 宽度
INT8_WIDTHINT16_WIDTHINT32_WIDTHINT64_WIDTH
(C23)(可选)
类型为 int8_tint16_tint32_tint64_t 的对象的位宽 (正好 8、16、32、64)
(宏常量)
INT_FAST8_WIDTHINT_FAST16_WIDTHINT_FAST32_WIDTHINT_FAST64_WIDTH
(C23)
类型为 int_fast8_tint_fast16_tint_fast32_tint_fast64_t 的对象的位宽
(宏常量)
INT_LEAST8_WIDTHINT_LEAST16_WIDTHINT_LEAST32_WIDTHINT_LEAST64_WIDTH
(C23)
类型为 int_least8_tint_least16_tint_least32_tint_least64_t 的对象的位宽
(宏常量)
INTPTR_WIDTH
(C23)(可选)
类型为 intptr_t 的对象的位宽
(宏常量)
INTMAX_WIDTH
(C23)
类型为 intmax_t 的对象的位宽
(宏常量)
有符号整数 : 最小值
INT8_MININT16_MININT32_MININT64_MIN
类型为 int8_tint16_tint32_tint64_t 的对象的最小值
(宏常量)
INT_FAST8_MININT_FAST16_MININT_FAST32_MININT_FAST64_MIN
类型为 int_fast8_tint_fast16_tint_fast32_tint_fast64_t 的对象的最小值
(宏常量)
INT_LEAST8_MININT_LEAST16_MININT_LEAST32_MININT_LEAST64_MIN
类型为 int_least8_tint_least16_tint_least32_tint_least64_t 的对象的最小值
(宏常量)
INTPTR_MIN
类型为 intptr_t 的对象的最小值
(宏常量)
INTMAX_MIN
类型为 intmax_t 的对象的最小值
(宏常量)
有符号整数 : 最大值
INT8_MAXINT16_MAXINT32_MAXINT64_MAX
类型为 int8_tint16_tint32_tint64_t 的对象的最大值
(宏常量)
INT_FAST8_MAXINT_FAST16_MAXINT_FAST32_MAXINT_FAST64_MAX
类型为 int_fast8_tint_fast16_tint_fast32_tint_fast64_t 的对象的最大值
(宏常量)
INT_LEAST8_MAXINT_LEAST16_MAXINT_LEAST32_MAXINT_LEAST64_MAX
类型为 int_least8_tint_least16_tint_least32_tint_least64_t 的对象的最大值
(宏常量)
INTPTR_MAX
类型为 intptr_t 的对象的最大值
(宏常量)
INTMAX_MAX
类型为 intmax_t 的对象的最大值
(宏常量)
无符号整数 : 宽度
UINT8_WIDTHUINT16_WIDTHUINT32_WIDTHUINT64_WIDTH
(C23)(可选)
类型为 uint8_tuint16_tuint32_tuint64_t 的对象的位宽 (正好 8、16、32、64)
(宏常量)
UINT_FAST8_WIDTHUINT_FAST16_WIDTHUINT_FAST32_WIDTHUINT_FAST64_WIDTH
(C23)
类型为 uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t 的对象的位宽
(宏常量)
UINT_LEAST8_WIDTHUINT_LEAST16_WIDTHUINT_LEAST32_WIDTHUINT_LEAST64_WIDTH
(C23)
类型为 uint_least8_tuint_least16_tuint_least32_tuint_least64_t 的对象的位宽
(宏常量)
UINTPTR_WIDTH
(C23)(可选)
类型为 uintptr_t 的对象的位宽
(宏常量)
UINTMAX_WIDTH
(C23)
类型为 uintmax_t 的对象的位宽
(宏常量)
无符号整数 : 最大值
UINT8_MAXUINT16_MAXUINT32_MAXUINT64_MAX
类型为 uint8_tuint16_tuint32_tuint64_t 的对象的最大值
(宏常量)
UINT_FAST8_MAXUINT_FAST16_MAXUINT_FAST32_MAXUINT_FAST64_MAX
类型为 uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_t 的对象的最大值
(宏常量)
UINT_LEAST8_MAXUINT_LEAST16_MAXUINT_LEAST32_MAXUINT_LEAST64_MAX
类型为 uint_least8_tuint_least16_tuint_least32_tuint_least64_t 的对象的最小值
(宏常量)
UINTPTR_MAX
类型为 uintptr_t 的对象的最小值
(宏常量)
UINTMAX_MAX
类型为 uintmax_t 的对象的最小值
(宏常量)

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

INT8_CINT16_CINT32_CINT64_C
扩展为具有其参数指定的 value 和类型 int_least8_tint_least16_tint_least32_tint_least64_t 的整数常量表达式
(函数宏)
INTMAX_C
扩展为具有其参数指定的 value 和类型 intmax_t 的整数常量表达式
(函数宏)
UINT8_CUINT16_CUINT32_CUINT64_C
扩展为具有其参数指定的 value 和类型 uint_least8_tuint_least16_tuint_least32_tuint_least64_t 的整数常量表达式
(函数宏)
UINTMAX_C
扩展为具有其参数指定的 value 和类型 uintmax_t 的整数常量表达式
(函数宏)
#include <stdint.h>
UINT64_C(0x123) // might expand to 0x123ULL or 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

[编辑] 示例

另请参阅有关在 格式宏 前使用空格的 C++ 兼容性说明,如本示例中所示。

#include <inttypes.h>
#include <stdio.h>
 
int main(void)
{
    printf("%zu\n", sizeof(int64_t));
    printf("%s\n", PRId64);
    printf("%+" PRId64 "\n", INT64_MIN);
    printf("%+" PRId64 "\n", INT64_MAX);
 
    int64_t n = 7;
    printf("%+" PRId64 "\n", n);
}

可能的输出

8
lld
-9223372036854775808
+9223372036854775807
+7

[编辑] 参考文献

  • C23 标准(ISO/IEC 9899:2024)
  • 7.8.1 格式说明符宏(p: TBD)
  • 7.18 整数类型 <stdint.h>(p: TBD)
  • C17 标准(ISO/IEC 9899:2018)
  • 7.8.1 格式说明符宏(p: 158-159)
  • 7.18 整数类型 <stdint.h>(p: 212-216)
  • C11 标准(ISO/IEC 9899:2011)
  • 7.8.1 格式说明符宏(p: 217-218)
  • 7.18 整数类型 <stdint.h>(p: 289-295)
  • C99 标准(ISO/IEC 9899:1999)
  • 7.8.1 格式说明符宏(p: 198-199)
  • 7.18 整数类型 <stdint.h>(p: 255-261)

[编辑] 另请参阅

C++ 文档 用于 固定宽度整数类型
C++ 文档 用于 用户定义的文字(格式宏说明