我需要在JavaScript中按位移位值64次。但JavaScript在32
之后开始四舍五入。
例如:
for(var j = 0; j < 64; j++)
{
mask = mask << 1;
console.log(mask);
}
这会打印从0
到1073741824
的值,但随后会轮次并开始打印0
。
答案 0 :(得分:31)
“在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);
}
你明白了。
答案 1 :(得分:8)
JavaScript将其所有数字初始存储为64位,但只要您开始使用按位运算符,解释器就会将数字转换为32位表示。
按位运算符在JS中有点笨拙,所以很烦人,你可能需要做一些更聪明的事情,比如编写你自己的64位函数。