我想交换两个整数,并且想知道这两个实现中的哪个更快:
带有临时变量的明显方法是:

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/

10-11 22:37
查看更多