现在的位置: 首页 > 综合 > 正文

a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法

2013年09月14日 ⁄ 综合 ⁄ 共 461字 ⁄ 字号 评论关闭

形式是这样的:

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的信息藏在了其中的一个变量中,从某种程度来说,交换总是需要一个媒介的。所谓的不需要中间变量的做法,其实也都是采用了一些巧妙的思路,使信息隐藏在变量中了。

不过这些思路还是很值得学习的,蛮发散的。

抱歉!评论已关闭.