C/C++黑魔法-没有临时值的交换

使用XOR异或运算符可以做的一件很酷的事情”没有临时值的交换”。

示例1

1
2
3
a ^= b;
b ^= a;
a ^= b;

示例2

1
a ^= b ^= a ^= b;

示例3

1
2
3
a = a + b;
b = a - b;
a = a - b;

示例4

1
b = (a + b) - ( a = b);

注意

  • 示例3与示例4中使用+运算符(当a+ba-b超出int类型范围时)可能造成溢出,导致ab变量交换不正确。