异或运算交换两个数

来源:互联网 发布:c 网络编程教程 编辑:程序博客网 时间:2024/06/05 10:57
a = a^b;b = a^b;a = a^b; 

这样就可以不借助第三个变量实现两个数的交换。

基于如下几个性质:

  • 任意变量x与自身异或结果为0,即:x^x = 0
  • 任意变量x与0进行异或运算,结果不变,即:x^0 = x
  • 异或运算的结合性:a^b^c = (a^b)^c = a^(b^c)
  • 异或运算的交换性:a^b = b^a

再来解释上面的交换为什么可行:

a = a^b
b = a^b --> b = (a^b)^b = a^(b^b) = a^0 = a,完成了a的值交给b的过程。
a = a^b --> a = (a^b)^a = (b^a)^a = b^(a^a) = b^0 = b 完成了b的值交给a的过程。

0 0