神奇的异或:在不引入第三个变量的情况下交换两个变量的数值

运行环境

操作系统:Windows 7
Python版本:Python 3.7

正文

一般情况下,当我们需要交换两个变量的值的时候,至少需要引入1个第三方变量(当然,如果愿意的话,也可以引入第四方和第五方变量>_<),但是,当我们使用异或的时候就不必这么做,只需要这两个变量就可以完成他们之间数值的交换。

设,有两个变量 a 和 b.
其中,a = 10, b = 20.

现在使用 Python 进行如下的运算:

图 1 使用 Python 异或运算交换变量的数值
图 1 使用 Python 异或运算交换变量的数值

可以看到,经过三次异或操作,成功的交换了a和b的数值。

其实,只要明白了异或的规律,就知道了这其中的原因,异或的运算规则是:

相同为0, 不同为1.

将上面的运算过程展开写就是这样的:

a = a ^ b = 10 ^ 20 = 0b(01010) ^ 0b(10100) = 0b(11110) = 30
b = a ^ b = 30 ^ 20 = 0b(11110) ^ 0b(10100) = 0b(01010) = 10
a = a ^ b = 30 ^ 10 = 0b(11110) ^ 0b(01010) = 0b(10100) = 20