您的位置:首页 > 产品设计 > UI/UE

[底层] 为什么Integer.MIN_VALUE-1会等于Integer.MAX_VALUE

2015-08-31 18:48 513 查看
Integer.MIN_VALUE-1 = Integer.MAX_VALUE

Integer.MAX_VALUE+1 = Integer.MIN_VALUE

实际上这里是计算机底层的位运算法则问题[1]

计算机底层采用了补码来进行加减乘除的运算,好处是符号位参与运算.

举上面两个例子来说明问题。

Integer.MIN_VALUE: $10000000000000000000000000000000$

Integer.MAX_VALUE: $01111111111111111111111111111111$

-1: $11111111111111111111111111111111$

一、

Integer.MIN_VALUE - 1 = Integer.MIN_VALUE + (-1)

  $10000000000000000000000000000000$

+  $11111111111111111111111111111111$

---------------------------------------------------

 $1,01111111111111111111111111111111$

舍弃最高位的进位,所以得到的就是Integer.MAX_VALUE

二、

Integer.MAX_VALUE + 1= Integer.MIN_VALUE

  $01111111111111111111111111111111$

+ $00000000000000000000000000000001$

---------------------------------------------------

  $10000000000000000000000000000000$  

除了补码之外,还有反码、移码等等。

1、反码

整数是它本身,负数是符号位不变数值位求反

2、移码

主要用于浮点数的表示当中的阶码

相应的补码符号位求反就是移码

[1] http://wenku.baidu.com/link?url=8ques5GUmTWrFybpKKFQG_bstr-7A4EdLatGIqcFMaL9xtDBgrSrO0GHEvQ5MZgld4u1leMs04wvqsYnnQ9CS_ryY1gu7YyW0n5pdni8_Qy

[2] http://blog.csdn.net/meng4411yu/article/details/8668625
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: