0

我对计算机通常用于计算的字节数有疑问。首先,我想让你看看下面的源代码。

源代码

printf("%d\n", sizeof(444444444));
printf("%d\n", 444444444);

printf("%d\n", sizeof(4444444444));
printf("%llu\n", 4444444444);

输出

4
444444444
8
4444444444

如您所见,计算机永远不会失去价值。如果它太大而无法放入 int 中,计算机本身会自动扩展它的类型。我认为计算机永远不会失去价值的原因是因为它最初是在至少比 8 位容器大的大型类型上运行的。

大佬能告诉我整体机制吗?提前谢谢你的帮助。

4

1 回答 1

2

这与“计算机的计算能力”无关。

您的示例与您在编译阶段处理的整数文字的大小有关。int大多数平台上, an是四个字节(32 位)。它的最大值为 0x7FFF_FFFF 或 2147483647。An 的unsigned int最大值为 0xFFFF_FFFF 或 4294967295。

对于大多数整数文字,编译器通常会默认int为(与 4 字节示例一样)。您的下一个值是 0x1_08e8_d71c 这对于 来说太大了int,因此文字被提升为 8 字节文字,long long.

这可能是对大多数编译器的警告。

GCC,(在 32 位模式下,-m32)给出以下警告,因为long只有 4 个字节:

警告:整数常量对于 'long' 类型来说太大了

输出

sizeof(int)=4, sizeof(long)=4, sizeof(long long)=8

然而,在 64 位模式下, ( -m64) GCC 很酷,因为它long是 8 字节。

sizeof(int)=4, sizeof(long)=8, sizeof(long long)=8

为了解决这个问题,您应该使用LL后缀:

long long val = 4444444444LL;
于 2013-04-23T04:40:11.823 回答