Skip to content

Latest commit

 

History

History
32 lines (18 loc) · 1.22 KB

File metadata and controls

32 lines (18 loc) · 1.22 KB

java中 byte为8 bits,那么-128为什么是最小值?

我们知道java中基本类型byte占8 bits,取值范围是-128到最+127,从这个正负号大家也能看出表示这个范围的二进制数是有符号位的,就是第一位。

比如+127是 0111 1111 而 -128是 1000 0000

正数好理解,负数是通过原码取反后+1 生成的补码表示 原码、反码、补码

比如-3的 源码是 1000 0011 反码是 1111 1100 补码是 1111 1101

计算机得到 1111 1101 后经过计算就知道是-3了。

然而这么算的话,最小的负数应该是 -127,原码为:1111 1111,补码为 1000 0001 ,为什么会是 -128 呢?

来看0这个数字如何表示,

  • 一个 +0 0000 0000

  • 一个 -0 1000 0000

而数学只有一个0,就把 0000 0000表示为0,多出的这个一个补码 1000 0000 人为规定为 -128!

同理,其他边界值比如int的 最小值-231 也是一个道理。

下面是一道很有意思的小题,大家可以试一下,以下是java代码:

byte i =127;
System.out.println(++i);