忽然听到motte的“搞定了”,然后马上就看到msn的签名:V
心里很高兴,然后忽然也比较伤心,这么多年了,不容易啊;唉,发文 以纪念。
一直知道"不需要不引入第三变量的变量交换"的一种办法,就是++--;今天终于知道并且理解了第二种方案。
因外上面的算术交换算法有导致变量溢出的危险,所以我们再想办法引入一个逻辑运算——位异或,也能得到交换效果,而且不会导致溢出。
位异或运算符是“^”,它的作用是按照每个位进行异或运算,异或运算有一个特点:
通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;
如存在c=a^b;这种关系后,任意给出两个变量进行位异或运算,都能得到剩下的第三个变量:
a=b^c;
b=a^c;
c=a^b;
因此位异或也常用于密码学中。
因为它是按位进行运算的,因此没有溢出的情况,在这里,我们运用位异或运算来交换变量的值。
理论上重载“^”运算符,也可以实现任意结构的交换
原文引自
http://hi.baidu.com/yarmu/blog/item/ddad0ef39a0b36cf0b46e00d.html