两个数据实现数据交换通常选用中间变量的方式实现,利用异或运算可以方便实现两个数据的互换。
异或运算:a^b (按位进行异或,相异为1,相同为0)
例如:a=5,即0101(2);b=6,即0110(2)。
通过以下三个赋值语句可以实现数据交换。
(1)a = a^b;
(2)b = b^a;
(3)a = a^b;
过程分析:(1) a = 0101(2) ^ 0110(2); a = 0011(2)
(2) b = 0110(2) ^ 0011(2); b = 0101(2)
(3) a = 0011(2) ^ 0101(2); a = 0110(2)
等效于以下两步:
① 执行前两个赋值语句:"a = a ^ b "和"b = b ^ a";”相当于b = b ^ ( a ^ b) = b ^ b ^ a = 0000(2) ^ a = a。
② 再执行第三个赋值语句: "a = a ^ b"。相当于 a = (a ^ b) ^ ( b ^ (a ^ b)) = (a ^ b) ^ (b ^ b ^ a) = a ^ b ^a = b。