<分区>
我在一个网站上看到,使用异或交换很快,因为它不使用临时变量。这是一个例子:
#include <stdio.h>
int main(void)
{
int a=234,b=789;
b=b^a;
a=b^a;
b=b^a;
printf("a=%d,b=%d",a,b);
return 0;
}
为什么人们不在现实代码中使用这种技术?只是风格不好吗?有什么地方没有明确定义吗?这是我的编译器可能会自动从更清晰的代码中生成的优化吗?
对于现代编译器和 CPU,使用 tmp 变量既更快又更具可读性。 2x 加载到寄存器中,然后 2x 存储回原始位置。
或者如果一个或两个变量已经在寄存器中,编译器可能会完全优化临时变量。如果异或交换在某个假设的机器上更快,一个好的编译器会在优化 tmp = a; 时为你使用它。一 = b; b = tmp;
所以你不需要显式地写它。这就是您使用 C 而不是在 asm 中手写的原因。
此外,xor-swap 仅适用于整数。如果你想交换 float 怎么办?字符串?自定义对象?等等