c -异或交换算法和使用第三变量交换有什么区别吗?

  • 本文关键字:交换 变量 区别 算法 swap xor
  • 更新时间 :
  • 英文 :


这两者之间有什么区别吗?使用一个比另一个有什么好处?

使用异或运算符交换

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

使用第三个变量

进行交换
int a, b, temp;
temp = a;
a = b;
b = temp;

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

永远不要使用异或交换

  1. 您拥有它(a^=b^=a^=b;)的方式实际上是未定义行为,因为您在排序点之间多次修改变量。编译器保留吃你猫的权利

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

XOR swapping是不清楚的:大多数人不会理解你的代码在做什么,它被认为是神秘的。

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

最新更新