不要轻易相信按用按位运算符的速度高很多!
wuxk 2003-07-03 03:29:08 今天做了一个测试,主要是交换两个变量的数值。
一个使用按位异或运算完成,另一个使用了一个临时变量,进行了n多次循环的交换,发现了用位运算符进行交换的性能远远不如用临时变量进行交换的。而且,程序的可读性几乎没有。
所以,我觉得在能不用位运算的时候,尽量不使用位运算为佳,尽管可能某些情况下会快一些,但增加了维护的时候的困难,而性能并不见得到了提高。
测试代码如下:
public class FirstDebug {
/*
* Construct for FirstDebug
*/
public FirstDebug(){
}
public static void main(String[] args){
long a=1;
long b=1;
long timeCount;
Calendar endC;
Calendar startC;
System.out.println("交换以下两数:");
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("第一批交换开始!");
startC = new GregorianCalendar();
for(long i=0;i<99999999;i++){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
endC = new GregorianCalendar();
timeCount = endC.getTimeInMillis() - startC.getTimeInMillis();
System.out.println("第二批交换运行完成,所花时间(毫秒):" + timeCount);
startC = new GregorianCalendar();
System.out.println("第二批交换开始!");
long c=0;
for(long i=0;i<99999999;i++){
c=a;
a=b;
b=c;
}
endC = new GregorianCalendar();
timeCount = endC.getTimeInMillis() -startC.getTimeInMillis();
System.out.println("第二批交换运行完成,所花时间(毫秒):" + timeCount);
}
}
运行结果如下:
交换以下两数:
a=1
b=1
第一批交换开始!
第二批交换运行完成,所花时间(毫秒):1500
第二批交换开始!
第二批交换运行完成,所花时间(毫秒):1375