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