C语言数据溢出

Python013

C语言数据溢出,第1张

符号int型数据的取值范围是-32768~32767,2个字节总共16位,第一位为符号位,正数的话第一位为0,负数则为1,整数的取值最大是第一位为0,其后的十五位全为1,算过来也就是32767,如果如题所说,加上1之后,第一位变为1,其余十五位全为0,转换一下,其十进制数据就是2的15此方,因为第一位为1,为负数,所以结果为-的2的15此方,也就是-32768~~~

在c语言中,数据的存储就像一个圆圈,正数溢出数据就会从最小负数开始,负数溢出数据同理,打个比方(简略写一下):

int

a=32768,b=-32769;

printf("a=%d,b=%d",&a,&b)

则会输出a=-32768,b=32767

这样则50000输出就是(50000-32767)+(-32768)+(-1)=-15536

溢出的后果很多,好像有设置还是跟配置有关的,比如自加,有可能是加到最大,就不会变了,也可能是加到最大值后再加一编程负最大(因为计算机里存储的数据第一位表示符号)或者是0了(无符号数),自减跟自加类似,减到一出可能出现最大值。