我需要在JavaScript中按位移位值64次.但JavaScript开始四舍五入32
.
例如:
for(var j = 0; j < 64; j++) { mask = mask << 1; console.log(mask); }
这将从打印0
到打印,1073741824
然后打印并开始打印0
.
"在Java中,按位运算符使用整数.JavaScript没有整数.它只有双精度浮点数.因此,按位运算符将它们的数字操作数转换为整数,执行它们的业务,然后将它们转换回来.在大多数语言中,这些运算符非常接近硬件并且速度非常快.在JavaScript中,它们离硬件非常远,而且非常慢.JavaScript很少用于进行位操作." - Douglas Crockford,Javascript:The Good Parts
关键是你没有任何理由使用按位运算符.只需乘以或除以2 ^ numbits.
你的代码应该是:
for(var j = 0; j < 64; j++) { mask = mask * 2; console.log(mask); }
或者一般:
function lshift(num, bits) { return num * Math.pow(2,bits); }
你明白了.
JavaScript将其所有数字初始存储为64位,但只要您开始使用按位运算符,解释器就会将数字转换为32位表示.
按位运算符在JS中有点笨拙,所以很烦人,你可能需要做一些更聪明的事情,比如编写你自己的64位函数.