在C语言和C++中,int 和 long 的大小是由编译器和操作系统的组合决定的,而不是直接取决于操作系统的位数。
在通常的情况下,int 表示整数,而 long 表示较大的整数。在32位系统上,int 通常是32位,而 long 通常也是32位。在64位系统上,int 通常是32位,而 long 通常是64位。
不同编译编译模型所占的位数
Datetype | LP64 | ILP64 | LLP64 | ILP32 | LP32 |
---|---|---|---|---|---|
char | 8 | 8 | 8 | 8 | 8 |
short | 16 | 16 | 16 | 16 | 16 |
int | 32 | 64 | 32 | 32 | 16 |
long | 64 | 64 | 32 | 32 | 32 |
long long | 64 | 64 | 64 | 64 | 64 |
pointer | 64 | 64 | 64 | 32 | 32 |
一般情况下windows64位一般使用LLP64模型
64位Unix,Linux使用的是LP64模型
在Windows 64位机器上,我们用以下代码输出类型所占的字节数:
1
2
3
std::cout << sizeof(int)<<std::endl;
std::cout << sizeof(long) << std::endl;
std::cout << sizeof(long long) << std::endl;
输出结果为
1
2
3
4
4
8