请教这个swap函数是怎么实现交换的

请问这个swap函数是如何实现交换的
void swap(int &a,int &b)
{    
a=a^b;    
b=a^b;    
a=a^b;
}

------解决思路----------------------
修正:一位(0或1)连着被同一位(0或1)异或两次还是它本身。
------解决思路----------------------
它利用了异或的两个特点:
1. 交换律和结合律,x^y^z = y^x^z = x^(y^z),就是说你可以随便加括号随便改次序,结果都一样
2. 任何数异或自己,结果都是0
把代码稍微改一下,多用两个中间变量就看的很清楚了:
void swap(int &a,int &b)
{    
int x, y;
x=a^b;    
y = b = x^b;    
a=x^y;
}
这个可以总结为:
b = (a ^ b) ^ b = a ^ (b ^ b) = a
a = x ^ (x ^ b) = (x ^ x) ^ b = b