关于整型数据的溢出问题???

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:50:14
关于c语言整型数据的溢出问题~~求高手多指点~~
悬赏分:0 - 解决时间:2006-6-19 09:23
先谢谢各位~~~

main()
{
int a,b;
a=32767;
b=a+1;
printf ("%d,b");
}
结果为 -32768 对这个结果我有点不明白的地方还望高手能点指点

a=32767 他在内存中的存储形式为 011111111111111 它的从左数第一位的0为符号位
b=a+1 他在内存中的存储形式为 100000000000000 那么此时他的左数第一位的1是符号位还是值
如果为符号位的话 00..00为其值的补码 此值为0 那么结果为什么还是 -32768呢

我就是这点不太明白,就是说一个数占8位,头一位用来存放“正负号”,那么对于正整数来说头一位必须为0,那么表示其值的只有7位;对于负整数而言,第一位必为1,那么表示其值的是8位还是7位就是说这是既表示“负号”有表示数值,还是。。。请高手给指点指点 非常感谢

100000000000000表示是负数,所以答案要减1再取反。
011111111111111 //-1
100000000000000 //取反
最后将这个数变成十进制,然后加上负号。

除了无符号型的数据,其他数据的首位都是符号位

整形负数在计算机中是用补码表示的。具体求解是这样的
100000000000000
得到反码:
011111111111111
然后加1
100000000000000
就是32768
在加上符号就是-32768