在 TurboC 和TurboC++中,一个int型的变量的最大允许值为32767,如果再加1,会出现什么情况呢?
# include<stdio.h>
void main(){
int a,b;
a = 32767;
b = a+1;
printf("a=%d,b=%d\n",a,b);
}
运行结果:
a=32767,b=-32768
图解:
a:32767
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
b:-32768
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
从图可以看到:变量a的最高位为0,后15位全为1.加1后变成第一位为1,后面15位全为0.
而它是-32768 的补码形式, 所以输出变量b的值为-32768。因为一个整型变量只能容纳
-32768~32767范围内的数,无法表示大于32767或小于-32768的数,遇到引情兄况就发生
"溢出"。