概述
在 C 语言标准库 <stdint.h>
中定义了一系列精确宽度的整数类型,这些类型保证了它们的位数宽度,从而允许编写跨平台的可移植代码。以下是一些常用的精确宽度整数类型:
int8_t
: 8位有符号整数uint8_t
: 8位无符号整数int16_t
: 16位有符号整数uint16_t
: 16位无符号整数int32_t
: 32位有符号整数uint32_t
: 32位无符号整数int64_t
: 64位有符号整数uint64_t
: 64位无符号整数
除了这些,<stdint.h>
还定义了其他几个类型,包括:
int_leastN_t
和uint_leastN_t
: 至少 N 位的最小有符号和无符号整数类型。int_fastN_t
和uint_fastN_t
: 快速的至少 N 位的有符号和无符号整数类型,通常用于访问内存或进行位操作。intptr_t
和uintptr_t
: 用于表示指针的有符号和无符号整数类型,其宽度与指针宽度相同。
这些类型的大小保证了至少有指定的位数,但实际的大小可能会更大,这取决于编译器和硬件平台。例如,int32_t
在大多数 32 位系统上可能是 32 位宽,在一些 64 位系统上也可能是 64 位宽,但这种情况很少见。
基本示例
使用这些类型可以提高代码的可移植性,因为你不需要关心底层平台的整数大小。例如:
#include <stdio.h>
#include <stdint.h>
int main() {
int8_t my_int8 = -127; // 最大值是 127,最小值是 -128
uint8_t my_uint8 = 255; // 最大值是 255
int32_t my_int32 = 1000; // 32位整数
uint32_t my_uint32 = 4294967295; // 32位无符号整数的最大值
printf("int8_t: %d\n", my_int8);
printf("uint8_t: %u\n", my_uint8);
printf("int32_t: %d\n", my_int32);
printf("uint32_t: %u\n", my_uint32);
return 0;
}
在编写跨平台代码时,使用这些精确宽度的整数类型是一个好习惯,因为它们提供了一种可预测的方式来处理固定大小的整数,而不必担心特定平台的整数大小差异。