首页 > js 数字运算比位运算快?为什么?

js 数字运算比位运算快?为什么?

var reverseBits = function(n) {
    var num = 0;
    for(var j=31;j>=0;j--){
        num += n%2*Math.pow(2,j);
        n = parseInt(n/2);
    }
    return num;
};
    var reverseBits = function(n) {
        var num=0;
        for(var j=31;j>=0;j--,n>>1)
            if(n&1){
                num += Math.pow(2,j);
            }
        return num;
    };

为什么要?parseInt,Math.floor 更好

在js里所有的数是64位浮点数,对于位操作 op ,x op y 都会对 x y先执行 toUint32/toInt32操作,如果op是位移操作,还要 y = y modulo 32 所以在js里面位操作比较慢也是很正常的。
标准里 << 定义


猜测n=parseInt(n/2)会被优化成n>>1这个应该没区别。而n%2与if(n&1),后者需要做类型转换,可能是比前者慢。

【热门文章】
【热门文章】