不使用其他变量,交换两个变量的位置

今天在《深入理解计算机系统》上看到的,突然想到以前似乎看到过这样的题:不使用其他变量,交换两个变量的位置。

方法是使用异或运算 ^ ,有特性 a^a=0, 0^a=a。

1
2
3
4
5
void inplace_swap(int *x, int *y){
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}

很基础,并且这种交换方式并没有性能上的优势,只是一道考题。