利用异或 ^
来交换两个数的值而且不引入其他的变量
- 异或满足交换律和结合律
- x ^ x == 0
- x ^ 0 == x
a=a^b;
b=a^b;
a=a^b;
异或交换,不引入其他变量
异或交换的原理
仅用一行代码实现
a^=b^=a^=b;
更高级一点的异或交换
在底层编程中,if 判断也是比较耗费性能的,所以,一个更优雅的写法是这样的
(a == b) || ((a ^= b), (b ^= a), (a ^= b))
在这个写法中,巧妙的运用了逻辑短路,如果第一个表达式a==b成立,后面的交换过程就不会被执行,否则后面的逻辑交换
这些写整个逻辑中没有if判断
在2009年Hallvard Furuseth提出了一个更优的写法,因为表达式a^b可以被缓存
(a ^ b) && (b ^= a ^= b, a ^= b)
异或交换仅适用于整数,不适用浮点数!