当前位置: 代码迷 >> C语言 >> 有关溢出的问题请教,急!
  详细解决方案

有关溢出的问题请教,急!

热度:66   发布时间:2005-02-16 22:04:00.0
有关溢出的问题请教,急!
谭浩强的44页:

main()

{int a,b;

a=32767;

b=a+1;

printf("%d,%d",a,b);

}

运行结果为32767,-32768,

书中给出的解释,

a:01111   1111    1111   
1111        =======32767

b:10000    0000    0000     0000       ======= --32768

至于b的值已经超过了-32768----32767的范围,那么补码的概念在

其中不起作用了,但是为什么计算机为什么将其显示为-32768呢?

谢谢!


----------------解决方案--------------------------------------------------------
10000    0000    0000     0000
这个你怎么说是-32768,这不就是补码了么!
----------------解决方案--------------------------------------------------------
你就一直按补码去算,因为数值在内存中是以补码的形式存放的.32767+1,即0111111111111111+1,等于1000000000000000,换成十进制不就是-32768吗
----------------解决方案--------------------------------------------------------
同意
----------------解决方案--------------------------------------------------------
或者考虑问题时是循环的考虑吧
32767+1
就返回到最前面了
----------------解决方案--------------------------------------------------------
同意3 楼5楼说的。对于溢出:
32767+1=》-32768
32767+2=》-32767
32767+3=》-32766
相当于:a+b-65536
32767+1-65536=-32768
32767+2-65536=-32767
32767+3-65536=-32766

----------------解决方案--------------------------------------------------------
同意.....
----------------解决方案--------------------------------------------------------
  相关解决方案