为什么这个程序输入11位数输出还是10位数

img


为什么这个程序我输入11位数输出的是10位数例如我输入156156156156
然后它输出的是10位数

int 型范围是 -2^31 到 2^31 - 1 ,即 -2147483648 到 2147483647;
int型输入 11位的数字,那int 赋值就 溢出了,显示最大的数 2147483647
这个你循环之前 ,打印一下 num 变量 就知道了

11位数,超出了int类型的取值范围了
改成long long num; scanf("%lld",&num);

因为你定义的int有符号数,溢出的少会变成负数,溢出的多只保留低32的数据,高位会被截断。
因此打印出来的结果不对,但不会报错~

这个问题要先理解计算机的存储原理,int为4字节的存储类型,1字节为8位,所有4字节就是32位,由于计算机存储是二进制,int是有符号的数据,所以最高位要作为符号位,即int的最大值为2147483647,即只有10位数,超过十位数就会从int的最小值开始计算,即2147483648为-2147483648,所以你输入11位数的时候那个值被重新计算了,并不是实际输入的值。