定宽整数类型 (C99 起)
来自cppreference.com
类型
对于下列每个标记有 (可选) 的 typedef 名,当且仅当实现提供了对应的某个类型时,实现才会定义该 typedef 名。
在标头
<stdint.h> 定义 | |
int8_tint16_tint32_tint64_tintN_t (可选)(可选)(可选)(可选)(可选) |
宽度正好是 N(典型情况有 8、16、32 和 64)位且无填充位的有符号整数类型 (typedef) |
int_fast8_tint_fast16_tint_fast32_tint_fast64_tint_fastN_t (可选) |
宽度至少有 N(典型情况有 8、16、32 和 64)位的最快的有符号整数类型 (typedef) |
int_least8_tint_least16_tint_least32_tint_least64_tint_leastN_t (可选) |
宽度至少有 N(典型情况有 8、16、32 和 64)位的最小的有符号整数类型 (如果有定义 intN_t,那么 int_leastN_t 表示相同的类型) (typedef) |
intmax_t |
位精确整数类型以外的(C23 起)最大宽度的有符号整数类型 (typedef) |
intptr_t (可选) |
位精确整数类型以外的(C23 起)足以保有指向 void 的指针的有符号整数类型 (typedef) |
uint8_tuint16_tuint32_tuint64_tuintN_t (可选)(可选)(可选)(可选)(可选) |
宽度正好是 N(典型情况有 8、16、32 和 64)位且无填充位的无符号整数类型 (typedef) |
uint_fast8_tuint_fast16_tuint_fast32_tuint_fast64_tuint_fastN_t (可选) |
宽度至少有 N(典型情况有 8、16、32 和 64)位的最快的无符号整数类型 (typedef) |
uint_least8_tuint_least16_tuint_least32_tuint_least64_tuint_leastN_t (可选) |
宽度至少有 N(典型情况有 8、16、32 和 64)位的最小的无符号整数类型 (如果有定义 uintN_t,那么 uint_leastN_t 表示相同的类型) (typedef) |
uintmax_t |
位精确整数类型以外的(C23 起)最大宽度的无符号整数类型 (typedef) |
uintptr_t (可选) |
位精确整数类型以外的(C23 起)足以保有指向 void 的指针的无符号整数类型 (typedef) |
宏常量
对于下列每个标记有 (有条件提供) 的宏,当且仅当实现定义了对应的 typedef 名时,实现才会定义该宏。
在标头
<stdint.h> 定义 | |
有符号整数:位宽 | |
INTN_WIDTH (C23)(有条件提供) |
intN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_FASTN_WIDTH (C23)(有条件提供) |
int_fastN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_LEASTN_WIDTH (C23)(有条件提供) |
int_leastN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
INTMAX_WIDTH (C23) |
intmax_t 的位宽 (宏常量) |
INTPTR_WIDTH (C23)(有条件提供) |
intptr_t 的位宽 (宏常量) |
有符号整数:最小值 | |
INTN_MIN (有条件提供) |
intN_t 的最小值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_FASTN_MIN (有条件提供) |
int_fastN_t 的最小值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_LEASTN_MIN (有条件提供) |
int_leastN_t 的最小值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INTPTR_MIN (有条件提供) |
intptr_t 的最小值 (宏常量) |
INTMAX_MIN |
intmax_t 的最小值 (宏常量) |
有符号整数:最大值 | |
INTN_MAX (有条件提供) |
intN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_FASTN_MAX (有条件提供) |
int_fastN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INT_LEASTN_MAX (有条件提供) |
int_leastN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
INTPTR_MAX (有条件提供) |
intptr_t 的最大值 (宏常量) |
INTMAX_MAX |
intmax_t 的最大值 (宏常量) |
无符号整数:位宽 | |
UINTN_WIDTH (C23)(有条件提供) |
uintN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINT_FASTN_WIDTH (C23)(有条件提供) |
uint_fastN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINT_LEASTN_WIDTH (C23)(有条件提供) |
uint_leastN_t 的位宽(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINTMAX_WIDTH (C23) |
uintmax_t 的位宽 (宏常量) |
UINTPTR_WIDTH (C23)(有条件提供) |
uintptr_t 的位宽 (宏常量) |
无符号整数:最大值 | |
UINTN_MAX (有条件提供) |
uintN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINT_FASTN_MAX (有条件提供) |
uint_fastN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINT_LEASTN_MAX (有条件提供) |
uint_leastN_t 的最大值(N 的典型情况有 8、16、32 和 64) (宏常量) |
UINTPTR_MAX (有条件提供) |
uintptr_t 的最大值 (宏常量) |
UINTMAX_MAX |
uintmax_t 的最大值 (宏常量) |
函数宏
对于下列每个标记有 (有条件提供) 的宏,当且仅当实现定义了对应的 typedef 名时,实现才会定义该宏。
在标头
<stdint.h> 定义 | |
INTN_C (有条件提供) |
展开成 int_leastN_t 类型的整数常量表达式,它的值由实参指定 (宏函数) |
INTMAX_C |
展开成 intmax_t 类型的整数常量表达式,它的值由实参指定 (宏函数) |
UINTN_C (有条件提供) |
展开成 uint_leastN_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 <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 Macros for format specifiers (第 TBD 页)
- 7.18 Integer types <stdint.h> (第 TBD 页)
- 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 页)
参阅
定宽整数类型的 C++ 文档
| |