#include<stdio.h>
int main()
{
printf("%d\n", sizeof(2147483648));
printf("%d" , sizeof(2147483647+1));
return 0;
}
Output:sizeof (2147483648) là 8 byte trong khi sizeof (2147483647 + 1) là 4 byte
8
4
Tôi hiểu rằng sizeof(2147483648)
là 8 byte vì nó không thể phù hợp trong 4 byte và được thăng chức long long int
. Nhưng tôi không hiểu điều gì xảy ra trong trường hợp của sizeof(2147483647+1)
Tôi đã tìm thấy similar question nhưng không thảo luận về trường hợp thứ hai.
Tại sao bạn làm điều này ngay từ đầu –
bản sao có thể có của [Tại sao là "int i = 2147483647 + 1;" OK, nhưng "byte b = 127 + 1;" không phải là compilable?] (http://stackoverflow.com/questions/6889176/why-is-int-i-2147483647-1-ok-but-byte-b-127-1-is-not-compilable) – GSerg
' 2147483647 + 1' là một biểu thức có hai toán hạng 'int', do đó kết quả là một' int' (và có hành vi không xác định vì tràn). Tương tự, '-2147483648' là một biểu thức trong đó' 2147483648' là một 'dài int' mà sau đó có toán tử trừ đơn nhất áp dụng cho nó, –