形式是这样的:
a ^= b ^= a ^= b
It swaps a and b without using a temporary.
用了一堆的XOR操作,猛地一看有点晕。。。
其实只是装的高深了而已。。。我们这样看:
a ^= (b ^= (a ^= b));
或者直接这样写好了:
a^=b;
b^=a;
a^=b;
这样子看起来就舒服多了,然后我们来分析一下:
首先说一下^这个运算符,XOR运算符很多人应该都明白,就是按位运算,相同为0,不同为1.
这个例子很好的利用了这个特性。
a^=b;//a此时为a XOR b的值,这样很巧妙的用a保存了a与b的差异存在的地方,即凡是a中为1的地方,均是a与b不同的地方
b^=a;//b = b xor a;这很好理解了,将b中所有与a不同的地方置反,此时的b就是a了。
a^=b;//这句和第二句的意思是近乎相同的。
其实这样的交换方法,只是巧妙的将a和b的信息藏在了其中的一个变量中,从某种程度来说,交换总是需要一个媒介的。所谓的不需要中间变量的做法,其实也都是采用了一些巧妙的思路,使信息隐藏在变量中了。
不过这些思路还是很值得学习的,蛮发散的。