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

来源:互联网 发布:如何自己制作动画知乎 编辑:程序博客网 时间:2024/06/11 06:49

形式是这样的:

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

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

原创粉丝点击