c语言怎么不能运行(fxl)

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:09:31
新手上路。书上说是整型的溢出?
#include"stdio.h"
main()
{int x,y;
x=32767;
y=x+1;
printf("%d\n",y);
}

结果怎么是:32768

应该是-32768吧

+32767=0(符号位,表示正数)111111111111111
如果数值再大,就会产生数据溢出的现象,比如说当32767加1
二进制数就变成10000000000000000
符号位是1代表此数是负数,负数在计算机中用补码表示,也就是-32768
,加2就是1000000000000001,也就是-32767,所以会出现错误

结果是:-32768啊。
x:0111111111111111
y:1000000000000000
变量x的最高位为0,后15位全为1。加1后变成第1位为1,后面15位全为0。而它是-32768的补码形式,所以输出变量 y的值为-32768。

在现在的32位机里
short型的范围是-32767~32767
而int 和long 都应该是-2147483647~2147483647
你的书说的是2字节的整型,想使整型溢出,要么把x,y定义成shout型,要么让x=2147483647,最后看到的y就会是负数

不好意思我的电脑显示的是-32768