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>可以提高代码的可移植性,特别是在需要精确控制整数大小的场景中。
 
       
点我分享笔记