位运算和取模运算效率测试

2,078 阅读1分钟

都听人说计算机擅长做位运算,今天我们就来用代码测试下

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)

运算次数十万一百万一千万一亿十亿
bit23642300
module25413953944

结论

随着运算次数的升高,bit运算在效率方面的优势也就体现出来了

为什么计算机运行位运算比取模运算快呢?这是因为位运算是直接用二进制进行运算,而取模运算需要转换成10进制再运算,所以位运算的效率比取模运算高。