题目
计算java中表达式(1000000*1000000)/1000000的值 (带符号32bit)
溢出理解
一旦超过了最大整数,就会像钟表或者汽车的里程表一样,从起点重新开始计数。
答案
溢出的个数:
997 852 516 353=1 000 000 000 000-2147483647
溢出了232遍,还溢出了1 420 103 681个
则中间结果为:1420103681-2147483648-1
表达式实际为:-727379968/1000000=-727
详解
带符号32bit -2^31至2^31-1
该题中起点是
-2 147 483 648=-2^31
溢出遍数
=
溢出数/2^32
余数
=
溢出的个数
-
溢出遍数
*2^32
溢出了
232
遍,还溢出了
余数
个
最终结果
=
余数+
最小整数
-1
之所以减
1
:
余数是
1
时,数字为 -2147483648
余数是
2
时,数字为
-2147483647
余数是
3
时,数字为
-2147483646
参考
《代码大全》