(u)int8_t、(u)int16_t、(u)int32_t、(u)int64_t
# types.h
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
#if __WORDSIZE == 64
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
# stdint-intn.h
typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# stdint-uintn.h
typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;
int_t 是通过typedef定义的,而不是其它数据类型。
因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。
类型 | bits | bytes |
---|
char | 8 | 1 |
short | 16 | 2 |
int | 16 | 2 |
long | 32 | 4 |
类型 | bits | bytes |
---|
char | 8 | 1 |
short | 16 | 2 |
int | 32 | 4 |
long | 32 | 4 |
longlong | 64 | 8 |
类型 | bits | bytes |
---|
char | 8 | 1 |
short | 16 | 2 |
int | 32 | 4 |
long | 64 | 8 |
longlong | 64 | 8 |
int_t | 类型 | bits | bytes |
---|
int8_t/uint8_t | char | 8 | 1 |
int16_t/uint16_t | short | 16 | 2 |
int32_t/uint32_t | int | 32 | 4 |
int64_t/uint64_t | long | 64 | 8 |
int64_t/uint64_t | longlong | 64 | 8 |
size_t和ssize_t
size_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。因为当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。