使用位运算交换两个数的值
void swap(int *x
, int *y
){
*y
= *x
^ *y
;
*x
= *x
^ *y
;
*y
= *x
^ *y
;
}
其中^表示按位bool运算: “EXCLUSIVE-OR异或”,具有性质:
a^a=00^a=a(a^b)^c=a^(b^c)
思考: 1.如果输入是两个同样的数,可以正常交换吗? 答:可以,没有问题 2.如果输入的是两个同样的地址呢? 答:不可以,这样会被置0,因为a^a=0,而且x与y始终同值
其他应用: 比如一道算法题:找出唯一 一个 只出现奇数次的数。可以用异或的位运算解决
参考资料:深入理解计算机系统 第3版