为什么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转换时,二进制的一致性。

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