C/C++ 整数类型的长度
参考 cppreference.cn
在某些语言中,整数类型的长度是固定的,如java中
- char 8
- short 16
- int 32
- long 64
可是C/C++ 与机器相关,整数类型长度与平台有关
先可以记一个简单的
按照C标准:
- char >= 8
- short >= 16
- int >= 16
- long >= 32
- long long >= 64
在C标准中同平台一定保证
1 == sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
而且C/C++ 的整数类型定义的形式也很多,现在给出长度等价表格
- char
char , signed char , unsigned char - short
short , signed short , unsigned short , short int , signed short int, unsigned short int - int
int , signed int , unsigned int , signed , unsigned - long
long , signed long , unsigned long , long int , signed long int, unsigned long int - long long
long long , signed long long , unsigned long long, long long int , signed long long int, unsigned long long int
现在引入C整数类型数据模型的概念
数据模型确定整数类型的大小,不同的平台使用的数据模型不同
列举4种常用的数据模型
- 32 位系统
- LP32 或 2/4/4 ( int 是 16 位,long 和指针是 32 位)
Win16 API - ILP32 或 4/4/4 ( int、long 和指针是 32 位);
Win32 API
Unix 和类 Unix 系统 (Linux, Mac OS X)
- LP32 或 2/4/4 ( int 是 16 位,long 和指针是 32 位)
- 64 位系统
- LLP64 或 4/4/8 ( int 和 long 是 32 位,指针是 64 位)
Win64 API - LP64 或 4/8/8 ( int 是 32 位,long 和指针是 64 位)
Unix 和类 Unix 系统 (Linux, Mac OS X)
- LLP64 或 4/4/8 ( int 和 long 是 32 位,指针是 64 位)