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