Java 中 byte 的取值范围为什么是 -128 到 +127

首先要了解的概念是 Java 中用补码表示二进制数,补码的最高位代表符号位,最高位是 1 则表示为正数,最高位是 0 则表示为负数。

正数的补码是本身,负数的补码其绝对值的二进制位按位取反后 +1。

例如:

+60:二进制表示形式为 0011 1100,补码为本身,也就还是 0011 1100
-60:已知 +60 的二进制表现形式为 0011 1100,按位取反后是 1100 0011,在加 1,就是1100 0100。即表示 -60 的二进制表现形式 1100 0100。

回到正题,那么 byte 表示一个字节,一个字节是 8 位,最高位是符号位。

那么 8 位能表示的最大值就是 0111 1111,换算成十进制就是 127。

最小的负数就是1000 0000,(最大的负数是 1111 1111 是负数-1的补码),换算成十进制就是 -128,
1000 0000 是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。1000 0000 减 1 得 0111 1111 然后取反 1000 0000
因为负数的补码是其绝对值取反,即 1000 0000 为最小负数的绝对值,而 1000 0000 的十进制表示是 128,所以最小负数是 -128