C语言数据溢出

Python015

C语言数据溢出,第1张

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

这不是数据溢出。这是由于没有指定小数位数(系统默认输出6位小数,加上2位整数,就是要输出8位数字),float只能保证7位有效数字,多余位数上的数字是无效的。

如果以%.1f或%g格式输出,就不会出这种错了。

如果改为double类型(相应地,输入语句要改为%lf格式),这样可以有15位有效数字,也不会出这种错的。

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

int

a=32768,b=-32769;

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

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

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