^表示异或(XOR)。当且仅当a=b时,有a^b=0 。异或满足交换律和结合律:
交换律:a ^ b = b ^ a
结合律:(a ^ b) ^ c = a ^ (b ^ c)
另外,在异或运算中,0类似加法中的0:加法中 a + 0 = a,异或中,a ^ 0 = a
好了,有上述知识准备就可以来看你的题目了:
a = a^b; // 这句没什么可说的
b = b^a;
由于前一句改变了a,因此这里变为:
b = b ^ (a ^ b)
= b ^ (b ^ a) (交换律)
= (b ^ b) ^ a (结合律)
= a (b ^ b = 0, a ^ 0 = 0)
a = a^b;
由于前两句的执行效果,这句变成:
a = (a ^ b) ^ a
= (b ^ a) ^ a (交换律)
= b ^ (a ^ a) (结合律)
= b (a ^ a = 0, b ^ 0 = b)
至此,完成a和b的交换
|