有关溢出的问题请教,急!
谭浩强的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
----------------解决方案--------------------------------------------------------
同意.....
----------------解决方案--------------------------------------------------------