main(){
int a;
a = 32768;
printf("%d",a);
}
打印出来后,显示为:-32768
为什么啊?有符号位整型的最大为32768,溢出后为什么为-32768了?
其实这个问题很简单的,这个可能和你编译器环境有关,int 类型表示范围是-32768-32767。所以你可以把它的表示范围比作一个圆。因为在电脑中负数是按补码保存的,所以加1之后会出现进位。如果是char 类型表示-128-127的话,那么char a = 128也会变成-128的。
你可以看一下下面的图,这个圆就好比表示的范围。如果不信的话你可以将int a = 32769;试试的,输出应该会变成-32787
你用的是16 bit的编译器吧,16bit的编译器的int范围是,32767 ~ -32768
对于32 bit而言 int型,表示的范围是2147483647~-2147483648
请注意,最大范围是32767,不是32768;
32768的最高bit是1,1就表示负数
32768 --> 0x8000 = -32768