注:原创,转载请说明原地址,谢谢。
研究了下十进制转二进制分别采用以下两种方法时的效率:移位操作和string 转换二进制
public class Test {
public static void shiftOper(int x){
//移位换算二进制
long sTime = System.nanoTime(); //获取开始时间
int i = 0,k = 0;
int nsarry[]= new int[33];
while(x > 0){
nsarry[i++] = (byte) (x & 0x01);
x = x>>1;
}
int afterArray[] = new int[i];
for(int j = i-1;j >= 0;j --){
afterArray[k] = nsarry[j];
k ++;
}
for(int m = 0;m < k;m ++){
System.out.print(afterArray[m]);
}
long eTime = System.nanoTime(); //获取结束时间
System.out.println(" 移位程序运行时间: "+(eTime-sTime)+"ns");
}
public static void stringOper(int x){
//string 换算二进制
long sTime1=System.nanoTime(); //获取开始时间
//int x1 = 11000;
String binary = Integer.toBinaryString(x);
String [] temp = binary.split(",");
int[] resu = new int[temp.length];
for(int i= 0;i<temp.length;i++){
resu[i] = Integer.parseInt(temp[i]);
}
for(int i= 0;i<resu.length;i++){
System.out.print(resu[i]);
}
long eTime1=System.nanoTime(); //获取结束时间
System.out.println(" string程序运行时间: "+(eTime1-sTime1)+"ns");
}
public static void main(String[] args) {
shiftOper(8);
stringOper(8);
}
}
运行结果:
1001 移位程序运行时间: 177761ns
1001 string程序运行时间: 520740ns
可以看出,移位操作比string至少要快2倍以上。在测试过程中,甚至有次达到137倍(这个估计不准),多数为2-5倍。在x=1100时,string方法会报错,还未知。