通常交换两个变量需借助一个临时变量,如:
int temp;
temp=a
a=b;
b=temp;
使用异或可以不借助临时变量交换两个数:
a = a ^ b;
b = a ^ b;
a = a ^ b;
这是用了异或的自反性性质做到的:a ^ b ^ b = a ^ 0 = a
具体推导过程:
第一步:a = a ^ b;
第二步:b = a ^ b = (a ^ b)^ b = a; 经过第一步的运算,a已经变成了a ^ b,代入运算后,b就变成a
第三步:a = a ^ b = (a ^ b) ^ a = b; a还是a ^ b,经过第二步b已经变成了a
不过有个坑....attention please!a和b不能相等!
如果a跟b相等,第一步就错了 a = a ^ b = 0