F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

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

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

posted on 2015-08-31 18:48  F_G  阅读(2401)  评论(0编辑  收藏  举报