gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:25:41 27 4
gpt4 key购买 nike

这是一种无需第三个变量即可交换 a 和 b 的方法。我理解“异或”在真值表中“真”或“假”的含义,但它到底在做什么?当我们处理数字而不是 boolean 值时,XOR 如何工作?

int a = 5; int b = 10;

a = a ^ b;

b = a ^ b;

a = a ^ b;

最佳答案

该操作按位进行,每个数字的二进制编码中的每个位一次。

你玩过“Lights Out”这个游戏吗?每个灯要么打开,要么关闭,每次按下按钮都会交换(异或)它们的模式。如果您第二次按下该按钮,相同的交换会将图案更改回来。如果您按下按钮组合,也会出现同样的情况。相同的按钮组合会将其更改回来 - 顺序不必相同。

同样的行为发生在游戏中以及变量的按位运算中。当将两个变量异或在一起时,一个变量中的位用于切换另一个变量中的位。由于这一变化的性质,哪个在哪​​个上进行切换并不重要 - 结果是相同的。两个数字中相同位置的相同位在结果的该位置产生 0。相反的位在该位置产生 1。

a = a ^ b;

a 现在设置为 a 和 b 的组合位掩码。 b 仍然是原来的值。

b = a ^ b;

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

a = a ^ b;

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

关于java - XOR (^) 交换算法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093606/

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