数组类型为 char 时,数组每个元素的字长与存储单元是1个byte(16进制2位,2进制8位)。而数组类型为int时,数组每个元素的字长与存储单元是4个byte(16进制8位,2进制32位)。现存放16进制2位数,例如 0xFF, 0x0A 之类,用 char 型足够了。若改用 int 型当然也可以,只是浪费了存储空间,因数位多,运算,读写也要多费时间。
开发过程中常遇到的数据类型C语言中int8_t、int16_t、int32_t、int64_t、uint8_t等可以区别为int一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。
| Specifier | Common Equivalent | Signing | Bytes | Bits | Minimum Value | Maximum Value |
|---|---|---|---|---|---|---|
| int8_t / sint8_t / sint8 / int8 / s8 | signed char | Signed | 1 | 8 | -128 | 127 |
| uint8_t / uint8 / u8 | unsigned char | Unsigned | 1 | 8 | 0 | 255 |
| int16_t / sint16_t / sint16 / s16 | signed short | Signed | 2 | 16 | -32,768 | 32,767 |
| uint16_t / uint16 / u16 | unsigned short | Unsigned | 2 | 16 | 0 | 65,535 |
| int32_t / int32 / sint32 / s32 | signed int | Signed | 4 | 32 | -2,147,483,648 | 2,147,483,647 |
| uint32_t / uint32 / u_int / u32 | unsigned int | Unsigned | 4 | 32 | 0 | 4,294,967,295 |
| sint32_t | signed long | signed | 4 | 32 | -2,147,483,648 | 2,147,483,647 |
| int64_t / sint64_t / sint64 | signed long long | Signed | 8 | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| uint64_t / u_int64_t / uint64 / u64 | unsigned long long | Unsigned | 8 | 64 | 0 | 18,446,744,073,709,551,615 |
| real32_t / real32 | float | Signed | 4 | 32 | -3.40E + 38 | 3.40E + 38 |
| real64_t / real64 | double | Signed | 8 | 64 | -1.79E + 308 | 1.79E + 308 |
提示:char最少是8-bit,short 最少是16-bit,而long最少是32-bit,int根据编译器的不同有16-bit也有32bit的。
size_t与ssize_tsize_t主要用于计数,如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数,ssize_t是有符号数。
在32位机器中定义为:typedef unsigned int size_t; (4个字节)
在64位机器中定义为:typedef unsigned long size_t;(8个字节)
由于size_t是无符号数,因此,当变量有可能为负数时,必须使用ssize_t。因为当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。
C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别



