#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',然後將一元減算子應用於它, –