XOR交换算法和使用第三个变量交换之间有什么区别吗?

Is there any difference between XOR swapping algorithm and swapping using third variable?

这两者之间有什么区别,比如一个更快还是更小? 使用一个优于另一个的好处?

使用 XOR 运算符进行交换

int a, b;
a ^= b ^= a ^= b;

使用第三个变量交换

int a, b, temp;
temp = a;
a = b;
b = temp;

XOR swapping不清楚:大多数人不会理解你的代码在做什么,被认为是晦涩难懂。

自解释代码总是更好,所以除非存在巨大的性能问题并且基准测试证明 xor 方法更快,否则最好使用第三个变量。

(由于您正在读取未初始化的变量,因此您的两个代码段的行为都未定义)。

永远不要使用 XOR 交换。

  1. 你的方式 (a^=b^=a^=b;) 实际上是 未定义的行为 因为你在 [=27= 之间多次修改一个变量]测序点。编译器保留吃你猫的权利

  2. 相信编译器会进行优化。

  3. 它只适用于整数类型。

  4. 如果 ab 引用同一个对象,它将失败:如果您使用此方法交换通过地址传递的对象,例如void xorSwap(int *x, int *y),正确的实现需要一个 if 块。