题目

int,long,long long在 32 位 ,64 位和 64 位下跑 32 位虚拟机的大小

一般来说在 32 位系统上:int 通常为 4 字节(32位),long 通常为 4 字节(32 位),long long 通常为 8 字节(64 位)

在 64 位系统上:int 通常位 4 字节(32 位),long 通常为 8 字节(64 位),long long通常为8 字节(64 位)

并且大小只和系统位数有关,所以在虚拟机下也就只和虚拟机的操作系统有关所以在64 位下跑 32 位虚拟机和 32 位系统是一致的。

解释

通常查询 C++20 ISO 14882 可以看到在 6.8.2 有关于基本类型的描述:

  1. 有五种标准signed integer type:

    1. signed char
    2. short int
    3. int
    4. long int
    5. Long long int

    并且按这个list 的顺序每种类型都至少要有和前面的类型一样多的空间。

    另外还有一些 impl 定义的扩展 signed integer type,与标准 signed integer type 统称为 signed integer type。$有符号整型所表示的值的范围是 -2的 N-1 次方到 2 的 N-1 次方-1。N 是类型的位宽。

  2. 对于每种 standard signed integer type,都有对应的 unsigned integer type,因此有:

    1. unsigned char
    2. unsigned short int
    3. unsigned int
    4. unsigned long int
    5. unsigned long long int

    同样对于扩展的 signed integer type,也有 unsigned integer type,统称为 unsigned integer type。他们的取值范围是 0 到 2 的 N 次方-1。

  3. signed integer type 的位宽不应该少于 Table 12 中指定值。

image-20240403141917626