XOR(^)交换算法如何工作?

cod*_*441 4 java

这是一种交换a和b而不需要第三个变量的方法.我理解XOR在真实表中的含义是"真"还是"假",但它究竟在这做什么呢?当我们处理的数字不是布尔值时,XOR如何工作?

int a = 5; int b = 10;

a = a ^ b;

b = a ^ b;

a = a ^ b;
Run Code Online (Sandbox Code Playgroud)

Eri*_*son 8

对于每个数字的二进制编码中的每个位,操作按位进行一次.

你有没有玩过" 熄灯 " 游戏?每个灯都打开或关闭,每个按钮按下交换(XOR)一个模式.如果再次按下该按钮,则相同的交换会更改模式.如果按下组合按钮,情况也是如此.相同的按钮组合将更改它 - 顺序不必相同.

同样的行为发生在游戏中,也发生在变量的按位操作中.当您将两个变量放在一起时,一个中的位用于切换另一个中的位.由于这种变化的性质,哪一个正在进行切换无关紧要 - 结果是相同的.两个数字中相同位置的相同位在结果中的该位置产生0.相反的位在该位置产生1.

a = a ^ b;
Run Code Online (Sandbox Code Playgroud)

a现在设置为a和b的组合位掩码. b仍然是原始价值.

b = a ^ b;
Run Code Online (Sandbox Code Playgroud)

b现在设置为(a XOR b)和b的组合位掩码.b取消,所以现在b设置为原始值a. a仍设置为a和b的组合位掩码.

a = a ^ b;
Run Code Online (Sandbox Code Playgroud)

a现在设置为(a XOR b)和a的组合位掩码.(记住,b实际上包含了a现在的原始值)a的取消,a现在设置为原始值b.