我看到这个评论,但不明白它。获取它的最后一个设置位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
其中唯一的位集对应于原始模式中的最低有效位集。
尚方宝剑之说
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
我建议阅读有关如何提出精心设计的问题的指南。我个人可以给出的一项建议是在您的问题末尾加上一句话,准确概括您想知道的内容。
添加回答
举报
0/150
提交
取消