异或之后为什么两个数的值就可以发生交换了呢?
之前的时候一直没能理解透彻,但是现在已经完全搞明白了呢。
我们都知道,异或的运算规则是,两数的各个二进制位相同结果为0,不同结果为1。
换句话说,就是与0异或结果不变,与1异或结果相反。
那么,是不是可以得到这样的两个性质:
- a ^ a = 0 各个二进制位都相同,故异或后结果为1
- a ^ 0 = a 就是上面所说的与0异或结果不变
通过异或交换时的主要代码如下,
a = a ^ b;
b = a ^ b;//b = (a ^ b) ^ b = a ^ 0 = a
a = a ^ b;//此时b = a,故a = (a ^ b) ^ a = b ^ 0 = b
由此,已经完成了两个数的值交换了。