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