byte的最小值为什么是-128

在计算机中,数值是以二进制补码形式存储的,java 也不例外。

8 位二进制补码的范围为 -128~127(-27 ~ 27 - 1);byte 的范围就是 8 位二进制补码的范围。

那么,问题来了。8 位二进制补码为什么能表示 -128 呢?

补码中第一位是符号位,只有剩下的七位是数值位,即
byte的最小值为什么是-128

数值位全为 1 时,最大值为 -27 - 1 ,即 -127;如果再加 1 就会发生溢出变成 1000 0000。

在补码中只有一个 0 ,即 0000 0000,+0;而 -0 ,1000 0000 在补码中规定用来表示 -128,也就是补码中的一种 数码结合 形式,符号位也表示数值位。

上面只是说规定 1000 0000 表示 -128,那么, -128 的补码可以通过计算出来吗?

答案是可以的,我们可以通过无符号数来计算出补码(无符号数的补码原码和反码都是一样的)。
byte的最小值为什么是-128

有符号数可以通过模运算来获得对应的无符号数(n 位二进制数的模为 2n,即 8 位二进制数的模为 256):

  • 当 0<= x <= 27 时,x = x
  • 当 -27 <= x < 0 时,x = x + 28

byte的最小值为什么是-128

参考链接:-128的二进制补码是怎么得来的?