猿问

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

我看到这个评论,但不明白它。


获取它的最后一个设置位


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.


慕标琳琳
浏览 136回答 2
2回答

潇湘沐

注释最好表达为“获取最低有效位集”。要了解发生了什么,您需要检查负数如何用二进制表示。该技术称为二进制补码,从数字的正表示开始工作;您对每个位进行补码(即 1 -> 0 和 0 -> 1)。然后将这个数字加 1。在 12 的例子中:00001100 1211110011 complement00000001 binary 111110100 add to complement to form twos complement negative如果您现在将原始值与负值相加,您将得到00000100 其中唯一的位集对应于原始模式中的最低有效位集。

尚方宝剑之说

正如评论所说,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我建议阅读有关如何提出精心设计的问题的指南。我个人可以给出的一项建议是在您的问题末尾加上一句话,准确概括您想知道的内容。
随时随地看视频慕课网APP

相关分类

Java
我要回答