我找到了这个常见的解决方案:-
int a=10, b=20;
a=a+b;
b=a-b;
a=a-b;
但是如果 a=2147483647 是一个整数的最大值,那么可能 a=a+b 是不可行的。
使用标准库怎么样?;)
std::swap(a,b);
尽管您也可以使用 XORing 算法,但除非您真的需要,否则不要使用它。
原因在这里得到了很好的解释:-
在现代 CPU 架构上,XOR 技术比使用临时变量进行交换要慢得多。原因之一是现代 CPU 努力通过指令流水线并行执行指令。在 XOR 技术中,每个操作的输入取决于前一个操作的结果,因此它们必须严格按顺序执行。如果效率非常重要,建议在目标架构上测试 XOR 技术和临时变量交换的速度。
虽然为时已晚,但由于您没有提到是否要构建函数,因此该swap
方法是最简单的方法。
但是,您也可以尝试使用 XOR 方法(尽管请查看上面关于其性能的参考),如下所示:
a ^= b;
b ^= a;
a ^= b;
解决方案是:
a ^= b;
b ^= a;
a ^= b;
它之所以有效,是因为x ^ x
对于 x 的任何值都等于 0,因此x ^ y ^ x
(以任何顺序)对于 x 和 y 的任何值都等于 y。不过,它不太可能比仅使用临时更快(除非您正在为具有高寄存器争用且没有流水线能力的 CPU 进行编程)。
尝试如下异或。
a ^= b;
b ^= a;
a ^= b;