Java中的整数都是通过补码表示的,当整数为正数时,补码和原码相同,当整数为负数时,补码为原码按位取反(符号位除外),然后加1.
通过一些例子可以比较明显的看出:
int a = -1; System.out.println(Integer.toBinaryString(a));
//output: 11111111111111111111111111111111
int a = -128; System.out.println(Integer.toBinaryString(a));
//output: 11111111111111111111111110000000
在将int通过(byte)方式转换为byte类型时,截取最后一个字节。
所以byte的值由int最后一个字节决定,最后一个字节的第一位变为符号位,所以byte的值在127和-128之间。
int a = 128122; System.out.println(Integer.toBinaryString(a)); byte b = (byte) a; System.out.println(b); //output: 11111010001111010 122
int a = 127; System.out.println(Integer.toBinaryString(a)); byte b = (byte) a; System.out.println(b); //output: 1111111 127
int a = 128; System.out.println(Integer.toBinaryString(a)); byte b = (byte) a; System.out.println(b); //output: 10000000 -128