Java中位运算符的负操作数如何工作?

7
-4 & -5 = -8 // How?
-4 & 5 = 4 // How?

我需要解释一下如何得出上述结果。我在解决正整数方面没有困难。

可能是位运算符结果如何出现?的重复问题。 - user719662
2个回答

10

将整数转换为它们的二进制表示(对于负整数,请使用补码),然后运行按位与操作:

-4 11111..1100 &
-5 11111..1011

-8 11111..1000


-4 11111..1100 &
 5 00000..0101

 4 00000..0100

我也尝试过使用二进制补码来处理负整数,但是我不明白为什么直到看到你的解答之前都没有得到正确的答案 :( - divine
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Eran
1
寻找二进制补码的其他方法。1)取反再加一:2)从最低有效位开始,写下所有零直到第一个一(包括它),然后写下其余位的补码。 - Margaret Bloom

3

我们来看一下数字的表示方式:

positive four    0100          
negative four    1100
positive five    0101          
negative five    1011
negative eight   1000

如果您尝试手动执行“and”操作,您将得到以下结果:
1100 (-4) & 1011 (-5) = 1000 (-8)
1100 (-4) & 0101 (5) = 0100 (4)

在这里,您可以阅读更多关于负二进制数的信息。

点击这里 了解更多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接