(u)int8_t、(u)int16_t、(u)int32_t、(u)int64_t、size_t、ssize_t区别

(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可以最有效的维护代码。

  • 16位平台
类型 bits bytes
char 8 1
short 16 2
int 16 2
long 32 4
  • 32位平台
类型 bits bytes
char 8 1
short 16 2
int 32 4
long 32 4
longlong 64 8
  • 64位平台
类型 bits bytes
char 8 1
short 16 2
int 32 4
long 64 8
longlong 64 8
  • int_t和数据类型的关系
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是有符号数。

  1. 在32位机器中定义为:typedef unsigned int size_t; (4个字节)
  2. 在64位机器中定义为:typedef unsigned long size_t;(8个字节)

由于size_t是无符号数,因此,当变量有可能为负数时,必须使用ssize_t。因为当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。

你可能感兴趣的:(c++,c++)