如果两个数交换你会怎么写:
a b
temp = a;
a = b;
b = temp;
能不能酷炫一点:
a = a + b;
b = a - b;
a = a - b;
能不能再酷炫一点:
a ^= b;
b ^= a;
a ^= b;
对比发现其实第二种和第三种原理是一样的,都是利用加减去交换。不过这里要注意一个地方,a、b要指向不同的变量,即对应的地址不一样。否则你会发现运算完成后变为0了。
a = a + a;
a = a - a;
a = a - a;
第三种同上。
附上一个swap的接口:
void swap(int *a, int *b)
{
if(a == b){
return;
}
*a ^= *b;
*b ^= *a;
*a ^= *b;
return;
}