什么是输出,任何人都可以解释为什么?

时间:2018-05-28 17:33:30

标签: java

public class BitShiftOpeartor {

    public static void main(String[] args) {

        int y1 = 28;
        int z1 = -30;
        System.out.println(y1 & z1);
        System.out.println(y1 | z1);
        System.out.println(y1 ^ z1);

    }

}

我的计算逻辑O / p应该是

28
-30
-2

实际o / p ---

0
-2
-2

2 个答案:

答案 0 :(得分:1)

你的计算错误了。以下是并排书写的28(-30).toBinaryString = 11111111111111111111111111100010 28.toBinaryString = 00000000000000000000000000011100 & : 00000000000000000000000000000000 = 0 | : 11111111111111111111111111111110 = -2 ^ : 11111111111111111111111111111110 = -2 的二进制表示形式:

{{1}}

一切都很好。刷新two's complement representation

答案 1 :(得分:1)

使用Integer#toBinaryString来表示整数的二进制表示。然后,只需使用简单的计算表

&

  00000000000000000000000000011100
& 11111111111111111111111111100010
----------------------------------
  00000000000000000000000000000000   <-- Easy, 0

|

  00000000000000000000000000011100
| 11111111111111111111111111100010
----------------------------------
  11111111111111111111111111111110   <-- Negative rep of 2

^

  00000000000000000000000000011100
^ 11111111111111111111111111100010
----------------------------------
  11111111111111111111111111111110   <-- Negative rep of 2

要检索正整数的负代表,请反转所有位并添加一个。这是2

的情况