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;
    };
阅读 4.5k
2 个回答

为什么要?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),后者需要做类型转换,可能是比前者慢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题