有如下一段代碼,運行結果在註釋中給出
public class IoTest {
@Test
public void test() {
byte b = -127;
int c = b&0xff;
int d = b;
System.out.println(b); // -127
System.out.println(c); // 129
System.out.println(d); // -127
System.out.println(Integer.toBinaryString(c)); // 10000001
System.out.println(Integer.toBinaryString(d)); // 11111111111111111111111110000001
}
}
回顧Java裏byte類型與int類型
byte
- 8位,有符號位,以二進制補碼錶示的整數。
- 範圍:-128(-2^7) ~ 127(2^7-1)。
int
- 32位,有符號位,以二進制補碼錶示的整數。
- 範圍:(-2^31) ~ (2^31-1)。
- 變量b是byte類型,對應十進制數爲:-127,二進制爲1000 0001。
- 變量c是int類型,int c = b&0xff 的過程爲:
byte類型向int類型轉換時,填充至32位,即b:1111 1111 1111 1111 1111 1111 1000 0001。
c = 1111 1111 1111 1111 1111 1111 1000 0001
& 0000 0000 0000 0000 0000 0000 1111 1111
= 0000 0000 0000 0000 0000 0000 1000 0001
對應十進制爲:129。 - 變量d是int類型,byte類型向int類型轉換時,填充至32位,即d:1111 1111 1111 1111 1111 1111 1000 0001,對應十進制爲:-127。
通過 &0xff ,保證了當byte向int轉換時,二進制的一致性。