gpt4 book ai didi

java - 这段涉及 xor 的代码实际上是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:17 25 4
gpt4 key购买 nike

我有一个变量代表两个数字的异或。例如:int xor = 7 ^ 2;
我正在查看一段代码,根据注释找到在 XOR 中设置的最右边的位:

int rightBitSet = xor & ~(xor - 1);

我不明白这段代码究竟是如何工作的。我的意思是在 7^2 的情况下,它确实会将 rightBitSet 设置为 0001 (二进制)即 1。(实际上是最右边的位集)
但是如果 xor7^3 那么 rightBitSet 被设置为 01004 这也是与 xor 相同的值(并且不是最右边的位集)。
代码的逻辑是找到一个数字,该数字代表构成 xor 的数字之间的不同位,尽管注释表明它找到了设置了最右边的位,在我看来,代码在任何地方都找到了一个具有 1 个不同位的位模式。
我对么?我也不确定代码是如何工作的。似乎在二进制表示中,数字X 和数字X-1 之间存在某种关系?
这是什么关系?

最佳答案

二进制数减1的作用是将其中最低位的1替换为0,低位全部置1。例如:

5 - 1 = 101 - 1 = 100 = 4
4 - 1 = 100 - 1 = 011 = 3
6 - 1 = 110 - 1 = 101 = 5

因此在计算 x & ~(x - 1) 时:在 x 的最低位 1 之上,~(x - 1)~x 具有相同的设置位,因此在 x 的最低有效位 1 之上,x & ~(x-1) 没有 1位。根据定义,x 在其最低有效位 1 处有一个 1 位,正如我们在上面看到的那样,~(x - 1) 也会,但是 ~(x - 1) 将在该点下方有 0。因此,x & ~(x - 1) 将只有一个 1 位,位于 x 的最低有效位。

关于java - 这段涉及 xor 的代码实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11807075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com