为什么没有人使用XOR互换? [关闭](Why don't people use xor

2019-09-03 01:07发布

我读了一个网站,使用XOR掉期交易是快,因为它不使用一个临时变量。 下面是一个例子:

#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;
}

为什么不使用的人在现实生活中的代码这种技术? 难道只是风格穷呢? 有没有很好地界定它的东西吗? 难道我的编译器可能会从更清晰的代码生成,自动优化?

Answer 1:

  1. 由于可读性优于性能。

  2. 因为tmp = a; a = b; b = tmp; tmp = a; a = b; b = tmp; 不是慢。

  3. 因为编译器将反正优化。

  4. 因为它适用于只是整数。 如果你想交换浮点数是什么? 字符串? 自定义对象? 等等



Answer 2:

所有答案都已经有考虑,它只是一个加成

- >如果这两个值也适用于相同的内存地址,结果将是零

- >编译器可以在幼稚交换优化掉临时变量

- >现代CPU努力通过指令流水线但是XOR技术来并行执行的指令是不是使用临时变量做交换,因为每个操作依赖于先前的结果相当慢

- > X + Y可以去整数溢出



Answer 3:

  1. 虽然没有明确的临时变量,结果实际上被写入寄存器之前存储在一个隐含的临时变量。

  2. 从XOR交换,你需要确保被交换的变量是不一样的。 否则都将被评估为0。



Answer 4:

性能增益通常非常小,成本“可以理解的代码”比获得的速度优势更高。



文章来源: Why don't people use xor swaps? [closed]