网上看了一些使用异或交换两数,不是很好理解。现在写一下自己的理解。
首先是
异或原则,对于任意 x:
-
x ^ x == 0;
-
x ^ 0 == x;
思路:
根据原则,可以得到两个公式:
求a: a^b^a=b
求b: a^b^b=a
交换两个数:
定义两个数:a b
a = a ^ b; // 保存 a ^ b 的结果
b = a ^ b; --> a ^ b ^ b = a // 根据公式发现,这一步求的是a,只是用b接收了
a = a ^ b; --> a ^ b ^ b = a ^ b ^ a = b // 这里的 b 实际上是a,所以满足最上面的公式。