首先,位异或具有如下性质:
a^b^b == a;
a^b^a == b;
因此,我们可以利用位异或可以在不引入第三变量的情况下进行数值交换,代码如下:
a = a^b;
b = a^b;
a = a^b;
也可以写成
a ^= b;
b ^= a;
a ^= b;
但是应注意,当swap的两个参数是同一变量时,用位异或会出现错误,如:
void swap(int * a, int * b){
*a ^= *b;
*b ^= *a;
*a ^= *b; //swap结果是*a和*b的值均为0
}
正确的方法是加上逻辑判断,避免同一变量进行位异或,如:
void swap(int * a, int * b){
if(a != b){
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
}