int 类型是 4 字节长,我在 Ubuntu 下用 C 语言编写了一个小程序来打印我刚刚输入的数字。当我输入 2147483648,即 2^31 时,它会打印 2147483647 而不是 -1。当我输入任何大于 2147483647 的数字时,也会发生同样的事情。为什么它不会溢出到 -1,因为我从 book 学习但似乎被截断为 INT_Max 以及位级别发生了什么?
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
printf("%d\n",x);
}
我犯了一个错误。INT_Max+1 应等于 INT_Min。我修改了代码:
#include <stdio.h>
int main(){
int x=2147483647;
int y=x+1;
printf("%d",y);
}
并且输出是-2147483648
现在我只是想知道当我调用函数 scanf 时发生了什么?我认为它将所有大于 2147483647 的输入数字截断为 2147483647。