都听人说计算机擅长做位运算,今天我们就来用代码测试下
public class BitAndModulus {
public static final long size =10000*10000;//分别取值 一千万,一亿,十亿
@Test
public void bit() {
long start = System.currentTimeMillis();
long a = 1;
for (long i = size; i > 0; i--) {
a = a & i;
}
long end = System.currentTimeMillis();
System.out.println("bit:" + (end - start));
}
@Test
public void module() {
long start = System.currentTimeMillis();
long a = 1;
for (long i = size; i > 0; i--) {
a = a % i;
}
long end = System.currentTimeMillis();
System.out.println("module:" + (end - start));
}
}
得到如下结果:
单位(ms)
| 运算次数 | 十万 | 一百万 | 一千万 | 一亿 | 十亿 |
|---|---|---|---|---|---|
| bit | 2 | 3 | 6 | 42 | 300 |
| module | 2 | 5 | 41 | 395 | 3944 |
结论
随着运算次数的升高,bit运算在效率方面的优势也就体现出来了
为什么计算机运行位运算比取模运算快呢?这是因为位运算是直接用二进制进行运算,而取模运算需要转换成10进制再运算,所以位运算的效率比取模运算高。