JavaScript:长整数的按位移

我需要在JavaScript中按位移64次。 但是JavaScript在32之后开始四舍五入。

例如:

 for(var j = 0; j < 64; j++) { mask = mask << 1; console.log(mask); } 

这将打印01073741824数值,然后循环并开始打印0

“在Java中,按位运算符使用整数,JavaScript没有整数,只有双精度浮点数,因此,按位运算符将其数字操作数转换为整数,然后将其转换回来。在大多数语言中,这些操作员非常接近硬件,而且速度非常快,在JavaScript中,他们距离硬件非常远,速度非常慢,JavaScript很less用于位操作。 – Douglas Crockford, Javascript:好的部分

关键是你没有任何理由使用按位运算符。 只是乘以或除以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位表示forms。

按位运算符在JS中有点不好意思,所以令人烦恼的是,你可能不得不做一些更聪明的事情,比如编写你自己的64位函数。