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
答案 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