交换值的有趣写法

如何不用中间变量即可交换变量值

Posted by mengxun on April 13, 2019

Python 或者 Go 里,如果想交换两个变量的值可以直接一行搞定,非常方便

i, j = j, i

但是 C 里面没有这种写法,如果想交换两个变量一般都会声明个中间的临时变量,然后进行交换:

temp = i;
i = j;
j = temp;

但是有种比较秀操作的写法,根本不需要第三个变量的参与,只需要这两个变量本身即可:

i = i + j;
j = i - j;
i = i - j;

不过这种写法,有溢出的风险。其实另外还有一种更好的写法:

i = i ^ j;
j = i ^ j;
i = i ^ j;

这样的话,第二行的j就等于i ^ j ^ j,即等于i,第三行的i则等于i ^ j ^ i ^j ^ j,即等于j,完美的完成了交换。