我想交换两个整数,我想知道这两个实现中哪一个更快: 使用临时变量的一个显而易见的方法是:
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;
}
第一个似乎使用一个额外的寄存器,但第二个是做三个加载和存储,而第一个只做两个每个。谁能告诉我哪个更快,为什么?原因更重要。