① (c语言)整型数据的溢出
其实这个问题很简单的,这个可能和你编译器环境有关,int 类型表示范围是-32768-32767。所以你可以把它的表示范围比作一个圆。因为在电脑中负数是按补码保存的,所以加1之后会出现进位。如果是char 类型表示-128-127的话,那么char a = 128也会变成-128的。
你可以看一下下面的图,这个圆就好比表示的范围。如果不信的话你可以将int a = 32769;试试的,输出应该会变成-32787
② C语言程序输出数据溢出问题
在c语言中,数据的存储就像一个圆圈,正数溢出数据就会从最小负数开始,负数溢出数据同理,打个比方(简略写一下):
int
a=32768,b=-32769;
printf("a=%d,b=%d",&a,&b);
则会输出a=-32768,b=32767;
这样则50000输出就是(50000-32767)+(-32768)+(-1)=-15536