今天在读《程序员的自我修养》时,第四章讲静态链接的开头,给出的实例程序中,有一个函数swap函数这样写的:
void swap(int * a, int* b){
*a ^= *b ^= *a ^= *b;
}
叹为观止啊,我们通常想,先把a=b赋值,如果不借助第三方数,此时剩余信息已经只是关于原先的b的信息了,而上述代码则相当于:
a = a' # b', b = (a' # b') # b' = a', a =( (a' # b') # b' ) # (a' # b') = b' ,这里#表示异或操作,也就是二进制加, a',b'分别表示原始的数值
多读好书,收益匪浅啊~
补充:今天才发现,这其中是有限制的,就是a和b不能相等的。。。,否则就是赋值0了