JavaScript:长整数的按位移
我需要在JavaScript中按位移64次。 但是JavaScript在32
之后开始四舍五入。
例如:
for(var j = 0; j < 64; j++) { mask = mask << 1; console.log(mask); }
这将打印0
到1073741824
数值,然后循环并开始打印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位函数。