byte,即字节,由 8 位的二进制组成。在 Java 中,byte 类型的数据是 8 位带符号的二进制数。
在计算机中,8 位带符号二进制数的取值范围是 [-128, 127],所以在 Java 中,byte 类型的取值范围也是 [-128, 127]。
接下来,我们用一段代码来更深刻地理解 byte:
public class A {
public static void main(String[] args) {
int b = 456;
byte test = (byte) b;
System.out.println(test);
}
}
上述代码,最后会输出 -56。原因如下:
456 的二进制表示是 111001000,由于 int 是 32 位的二进制,所以在计算机中,实际上是 00000000000……111001000。当 int 转成 byte 的时候,计算机会只保留最后 8 位,即 11001000。
然后 11001000 的最高位是 1,那么表示是一个负数,而负数在计算机中都是以补码的形式保存的。我们计算 11001000 对应的数值:取反加一得到原码大小 00111000,即 56,所以 11001000 表示的是 -56,因此 test 的值为 -56。

