我有一个代表 2 个数字的 XOR 的变量。例如:int xor = 7 ^ 2;
我正在研究根据注释找到 XOR 中设置的最右边位的代码:
int rightBitSet = xor & ~(xor - 1);
我无法理解这段代码究竟是如何工作的。我的意思是,在这种情况下,7^2
它确实会设置rightBitSet
为0001
(二进制),即 1。(确实是最右边的位)
但是如果xor
是,7^3
那么将rightBitSet
设置为0100
ie 4
,这也是与xor
(并且不是最右边的位)相同的值放)。
代码的逻辑是在组成的数字之间找到一个代表不同位的数字,xor
尽管注释表明它找到了最正确的位集,但在我看来,代码找到了一个具有 1 个不同位的位模式在任何地方。
我对么?我也不确定代码是如何工作的。似乎数字X
和数字之间存在某种关系X-1
在它的二进制表示?
这是什么关系?