今天做USACO的时候需要写一个交换函数
脑子里很快出现了三种写法:
方法一:临时变量
inline void swap3(int& a,int& b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
方法二:加减法
inline void swap2(int& a,int& b)
{
a = a+b;
b = a-b;
a = a-b;
}
方法三:诡异的位运算
inline void swap1(int& a,int& b)
{
a = a^b;
b = a^b;
a = a^b;
}
(你:我看不懂...)
(我:我也看不懂...)
对三种写法评测,方法是调用每个一亿次
结果如下:
第一种:687ms
第二种:1029ms
第三种:1014ms
结论不言而喻...看来位运算不是全能的...
At last:看来我机器性能不赖...不调用一亿次根本看不出太大的差异...下次超超频?
伟大的Intel,伟大的扣肉E6550...
据我测试
PASCAL 位运算那个快于前两种