在这里只是记下在看书时留意到的一个有趣的小程序
刚入门学习写代码时,写一个用来交换两个数的程序swap是很常见的例子,而一般这个代码程序是这么写的(用c++语言来实现)
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
这个程序是一个很自然的想法。把a放到一个临时变量里去,然后把b赋值给a,然后再把临时变量,即原本的a赋值给b。于是完成了两个数之间的交换。
在这里,不知道有没人想过,能不能不引用第三个变量,即不用temp,只有a和b就完成整个swap过程呢?
呵呵,今天看的例子就是这么实现的。他通过引用布尔操作,对变量的位进行操作来实现。C++代码如下:
void swap(int *a, int *b){
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
其实在上面整个函数里,就用到了 ^ (异或)操作来实现两个数之间的交换。
b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a;
a = (a ^ b) ^ ((a ^ b) ^ b) = (a ^ b) ^ a = (a ^ a) ^ b = b;
于是,通过对位进行操作,整个swap操作就没有引用其他临时变量而完成。
不过,这种方法相对于前者并没有什么性能上的优越,it is merely an intellectual amusement....