为什么这个代码不打印相同的数字
long long a, b;
a = 2147483647 + 1;
b = 2147483648;
printf("%lld\n", a);
printf("%lld\n", b);
我知道int变量的最大值是2147483647,因为int变量是4字节.
为什么这个代码不打印相同的数字
long long a, b;
a = 2147483647 + 1;
b = 2147483648;
printf("%lld\n", a);
printf("%lld\n", b);
我知道int变量的最大值是2147483647,因为int变量是4字节.
2147483647 + 1
被判断为两个ints
的总和,因此溢出.
2147483648
太大,无法放入int
中,因此编译器将其假定为long
(或MSVC中的long long
).因此它不会溢出.
要以long long
为单位进行求和,请使用适当的常量后缀,即.
a = 2147483647LL + 1;