我对计算机通常用于计算的字节数有疑问。首先,我希望您看到下面的源代码。
源代码
printf("%d\n", sizeof(444444444));
printf("%d\n", 444444444);
printf("%d\n", sizeof(4444444444));
printf("%llu\n", 4444444444);
输出
4
444444444
8
4444444444
正如您所看到的,计算机永远不会失去价值。如果它太大而不适合int,计算机本身会自动扩展它的类型。我认为计算机永远不会失去价值的原因是因为它最初在大型机器上运行已经至少比8位容器更大。
你们能告诉我整体机制吗?感谢您的帮助。
答案 0 :(得分:2)
这与“电脑”的计算能力无关。
您的示例是关于您在编译阶段处理的整数文字的大小。 大多数平台上的int
是四个字节(32位)。它的最大值为0x7FFF_FFFF或2147483647. 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;