aut*_*tic 1 c swap xor premature-optimization
我在一个网站上读到使用xor swaps很快,因为它不使用临时变量.这是一个例子:
#include <stdio.h>
int main(void)
{
int a=234,b=789;
b=b^a;
a=b^a;
b=b^a;
printf("a=%d,b=%d",a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
人们为什么不在现实代码中使用这种技术?这只是穷人的风格吗?有没有明确定义的东西?这是我的编译器可以自动生成更清晰代码的优化吗?
小智 20
因为可读性优于性能.
因为tmp = a; a = b; b = tmp;不是那么慢.
因为编译器无论如何都会优化它.
因为它仅适用于整数.如果要交换浮点数怎么办?字符串?自定义对象?等等
所有的答案已经在那里考虑它只是一个补充 -
- >如果两个值都用于相同的内存地址 - 结果将为零
- >编译器可以优化掉天真交换中的临时变量
- >现代CPU努力通过指令流水线并行执行指令但是使用XOR技术比使用临时变量进行交换慢得多,因为每个操作都取决于之前的结果
- > x + Y可能会出现整数溢出