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