#include<stdio.h>
int main()
{
printf("%d\n", sizeof(2147483648));
printf("%d" , sizeof(2147483647+1));
return 0;
}
输出:的sizeof(2147483648)是8个字节,而的sizeof(2147483647 + 1)为4个字节
8
4
我明白sizeof(2147483648)
是因为它可以不适合在4个字节的8个字节,并提升为long long int
。但我不明白会发生什么情况sizeof(2147483647+1)
我发现similar question但它没有讨论第二种情况。
你为什么要这么做首先 –
可能的重复[为什么是“int i = 2147483647 + 1;”好的,但是“字节b = 127 + 1;”是不是compilable?](http://stackoverflow.com/questions/6889176/why-is-int-i-2147483647-1-ok-but-byte-b-127-1-is-not-compilable) – GSerg
' 2147483647 + 1'是一个表达式,它具有两个“int”操作数,所以结果是一个“int”(并且由于溢出而具有未定义的行为)。同样,'-2147483648'是一个表达式,其中'2147483648'是一个'long int',然后将一元减算子应用于它, –