我想交换两个整数,并且想知道这两个实现中的哪个更快:
带有临时变量的明显方法是:
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
或大多数人都看过的xor版本:
void swap(int* a, int* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
似乎第一个使用了一个额外的寄存器,但是第二个执行了三个加载和存储,而第一个只执行了两个。有人可以告诉我哪个更快,为什么?为什么更重要。
最佳答案
如果a和b指向相同的地址,则XOR方法将失败。第一个XOR将清除两个变量所指向的内存地址上的所有位,因此一旦函数返回(* a == * b == 0),无论初始值如何。
Wiki页面上的更多信息:
XOR swap algorithm
尽管不太可能出现此问题,但我总是更喜欢使用保证有效的方法,而不是在意外情况下失败的聪明方法。
关于c - 在C中交换值的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36906/