简单地说,
X = Integer
Y = Another Integer
Z ( If used ,Integer Temp )
什么是最有效的方法?
方法I:
Z = X
X = Y
Y = Z
方法II:
X ^= Y
Y ^= X
X ^= Y
编辑我 [装配视图]
方法I:
MOV
MOV
MOV
方法II:
TEST ( AND )
JZ
XOR
XOR
XOR
注意:
MOV
比XOR
TEST
,JZ
用于XOR
Equality Safe 答案 0 :(得分:3)
在大多数情况下,使用临时变量(通常是程序集级别的寄存器)是最佳选择,也是编译器倾向于生成的选项。
在大多数实际场景中,使用一个简单的交换算法 临时注册更有效率。 XOR的有限情况 交换可能是实际的包括:在处理器上的 指令集编码允许XOR交换在a中编码 较少的字节数;在一个具有高套准压力的地区,它 可以允许寄存器分配器避免溢出寄存器。在 可用RAM的微控制器非常有限。因为这些 情况很少见,大多数优化编译器都不会产生异或 交换代码。
http://en.wikipedia.org/wiki/XOR_swap_algorithm
此外,如果将相同的变量作为两个参数传递,则XOR Swap实现将失败。正确的实现(来自同一链接)将是:
void xorSwap (int *x, int *y) {
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
请注意,代码不会交换立即传递的整数,但是 首先检查他们的地址是否不同。这是因为,如果 地址相等,算法将折叠为三倍* x ^ = * x 结果为零。
答案 1 :(得分:0)
尝试这种交换数字的方式
int a,b;
A = A + B-(B = A);