爲什麼Java裏byte類型傳遞給int類型時與&0xff?

有如下一段代碼,運行結果在註釋中給出

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)。
  1. 變量b是byte類型,對應十進制數爲:-127,二進制爲1000 0001。
  2. 變量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。
  3. 變量d是int類型,byte類型向int類型轉換時,填充至32位,即d:1111 1111 1111 1111 1111 1111 1000 0001,對應十進制爲:-127。

通過 &0xff ,保證了當byte向int轉換時,二進制的一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章