为了账号安全,请及时绑定邮箱和手机立即绑定

在 &= -a 中使用 Java 会发生什么

在 &= -a 中使用 Java 会发生什么

慕标琳琳 2021-11-17 15:43:57
我看到这个评论,但不明白它。获取它的最后一个设置位diff &= -diff;我试过int a = 3 & -3; it returns 1.int a = 2 & -2; it returns 2.int a = 4 & -4; it returns 4.int a = 5 & -5; it returns 1.
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

注释最好表达为“获取最低有效位集”。要了解发生了什么,您需要检查负数如何用二进制表示。该技术称为二进制补码,从数字的正表示开始工作;您对每个位进行补码(即 1 -> 0 和 0 -> 1)。然后将这个数字加 1。在 12 的例子中:


00001100 12

11110011 complement

00000001 binary 1

11110100 add to complement to form twos complement negative

如果您现在将原始值与负值相加,您将得到


00000100 

其中唯一的位集对应于原始模式中的最低有效位集。


查看完整回答
反对 回复 2021-11-17
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

正如评论所说,diff & -diff返回在 diff 上设置的最后一位的值。例如:


diff = 14

.... = 1110 (binary)

....     ^ last set bit

.... 10 is the last set bit

.... 10 in decimal is 2

另一个例子


diff = 24

.... = 11000 (binary)

....    ^ last set bit

.... 1000 is the last set bit

.... 1000 in decimal is 8

我建议阅读有关如何提出精心设计的问题的指南。我个人可以给出的一项建议是在您的问题末尾加上一句话,准确概括您想知道的内容。


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信