定宽整数类型 (C99 起)

来自cppreference.com
< c‎ | types

类型

在标头 <stdint.h> 定义
int8_tint16_tint32_tint64_t
(可选)
分别是宽度正好是 8、16、32 和 64 位的有符号整数类型
无填充位并对负值使用补码
(在且只有在实现直接支持该类型时才会提供)
(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)

实现可在 N 不是 8、 16、 32 或 64 时定义 typedef 名 intN_tint_fastN_tint_leastN_tuintN_tuint_fastN_tuint_leastN_t 。形为 intN_t 的 typedef 名仅若实现支持有该宽度而无填充的整数类型才可以得以定义。从而 uint24_t 代表宽度准确地为 24 位的无符号整数类型。

下面列出的每个宏当且仅当实现定义对应的 typedef 名时才得以定义。宏 INTN_CUINTN_C 分别对应 typedef 名 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
(可选)
分别是 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_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
(可选)
分别是 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 的最大值
(宏常量)

最小宽度整数常量的函数宏

在标头 <stdint.h> 定义
INT8_CINT16_CINT32_CINT64_C
展开成拥有以其参数指定的值和类型分别为 int_least8_tint_least16_tint_least32_tint_least64_t 的整数常量表达式
(宏函数)
INTMAX_C
展开成拥有以其参数指定的值和 intmax_t 类型的整数常量表达式
(宏函数)
UINT8_CUINT16_CUINT32_CUINT64_C
展开成拥有以其参数指定的值,类型分别为 uint_least8_tuint_least16_tuint_least32_tuint_least64_t 的整数常量表达式
(宏函数)
UINTMAX_C
展开成拥有以其参数指定的值和 uintmax_t 类型的整数常量表达式
(宏函数)
#include <stdint.h>
UINT64_C(0x123) // 可以展开成 0x123ULL 或 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

示例

#include <stdio.h>
#include <inttypes.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

引用

  • C17 标准(ISO/IEC 9899:2018):
  • 7.8.1 Macros for format specifiers (第 158-159 页)
  • 7.18 Integer types <stdint.h> (第 212-216 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.8.1 Macros for format specifiers (第 217-218 页)
  • 7.18 Integer types <stdint.h> (第 289-295 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.8.1 Macros for format specifiers (第 198-199 页)
  • 7.18 Integer types <stdint.h> (第 255-261 页)

参阅