C 标准库 <stdint.h>
<stdint.h>
是 C99 标准引入的头文件,它提供了一些整数类型的定义,这些类型具有明确的大小和符号属性,确保在不同平台上的一致性。
<stdint.h>
库是为了弥补 C 语言中不同平台整数类型大小不一致的问题,从而提高代码的可移植性和可维护性。
<stdint.h>
主要用于定义固定大小的整数类型、整数类型的最小/最大值、以及整数类型的类型限定符。这样可以避免依赖编译器或操作系统平台特定的整数大小。
<stdint.h>
通过提供固定宽度的整数类型和相关宏,使得编程人员能够明确指定所需整数的大小,而不依赖于平台的实现细节。
<stdint.h>
的主要目的是:
提供固定宽度的整数类型(如
int8_t
、int16_t
等),确保其大小在不同平台上一致。定义与平台无关的整数类型(如
int_least8_t
、int_fast16_t
等),用于优化性能和内存使用。提供最大宽度整数类型(如
intmax_t
、uintmax_t
),用于表示最大可能的整数。
固定宽度整数类型
这些类型明确指定了其宽度(位数),确保在不同平台上具有相同的大小。
类型 | 描述 |
---|---|
int8_t |
8 位有符号整数 |
int16_t |
16 位有符号整数 |
int32_t |
32 位有符号整数 |
int64_t |
64 位有符号整数 |
uint8_t |
8 位无符号整数 |
uint16_t |
16 位无符号整数 |
uint32_t |
32 位无符号整数 |
uint64_t |
64 位无符号整数 |
注意:
-
如果平台不支持某个固定宽度类型,则不会定义该类型。
最小宽度整数类型
这些类型至少具有指定的宽度,但可能更大。
类型 | 描述 |
---|---|
int_least8_t |
至少 8 位有符号整数 |
int_least16_t |
至少 16 位有符号整数 |
int_least32_t |
至少 32 位有符号整数 |
int_least64_t |
至少 64 位有符号整数 |
uint_least8_t |
至少 8 位无符号整数 |
uint_least16_t |
至少 16 位无符号整数 |
uint_least32_t |
至少 32 位无符号整数 |
uint_least64_t |
至少 64 位无符号整数 |
最快最小宽度整数类型
这些类型是具有指定宽度的最快整数类型,通常用于性能优化。
类型 | 描述 |
---|---|
int_fast8_t |
至少 8 位的最快有符号整数 |
int_fast16_t |
至少 16 位的最快有符号整数 |
int_fast32_t |
至少 32 位的最快有符号整数 |
int_fast64_t |
至少 64 位的最快有符号整数 |
uint_fast8_t |
至少 8 位的最快无符号整数 |
uint_fast16_t |
至少 16 位的最快无符号整数 |
uint_fast32_t |
至少 32 位的最快无符号整数 |
uint_fast64_t |
至少 64 位的最快无符号整数 |
最大宽度整数类型
这些类型用于表示最大可能的整数。
类型 | 描述 |
---|---|
intmax_t |
最大宽度的有符号整数 |
uintmax_t |
最大宽度的无符号整数 |
指针宽度整数类型
这些类型用于表示指针大小的整数。
类型 | 描述 |
---|---|
intptr_t |
可以存储指针的有符号整数 |
uintptr_t |
可以存储指针的无符号整数 |
宏定义
<stdint.h>
还定义了一些宏,用于表示特定类型的最大值和最小值。
宏 | 描述 |
---|---|
INT8_MIN |
int8_t 的最小值 |
INT8_MAX |
int8_t 的最大值 |
UINT8_MAX |
uint8_t 的最大值 |
INT16_MIN |
int16_t 的最小值 |
INT16_MAX |
int16_t 的最大值 |
UINT16_MAX |
uint16_t 的最大值 |
INT32_MIN |
int32_t 的最小值 |
INT32_MAX |
int32_t 的最大值 |
UINT32_MAX |
uint32_t 的最大值 |
INT64_MIN |
int64_t 的最小值 |
INT64_MAX |
int64_t 的最大值 |
UINT64_MAX |
uint64_t 的最大值 |
INTMAX_MIN |
intmax_t 的最小值 |
INTMAX_MAX |
intmax_t 的最大值 |
UINTMAX_MAX |
uintmax_t 的最大值 |
实例
以下是一个使用 <stdint.h>
的示例:
实例
#include <stdint.h>
int main() {
// 固定宽度整数类型
int32_t a = 100;
uint64_t b = 1000000000000ULL;
// 最小宽度整数类型
int_least16_t c = 200;
// 最快最小宽度整数类型
int_fast32_t d = 300;
// 最大宽度整数类型
intmax_t e = INTMAX_MAX;
// 输出值
printf("a = %d\n", a);
printf("b = %llu\n", b);
printf("c = %d\n", c);
printf("d = %d\n", d);
printf("e = %jd\n", e);
return 0;
}
注意事项
<stdint.h>
仅在 C99 及更高版本中可用。固定宽度类型(如
int32_t
)在某些平台上可能不可用,因此在使用时应检查其是否定义。使用
<stdint.h>
可以提高代码的可移植性,特别是在需要精确控制整数大小的场景中。