【发布时间】:2010-09-25 03:21:58
【问题描述】:
我需要在 JavaScript 中将一个值按位移动 64 次。但是 JavaScript 在 32 之后开始舍入。
例如:
for(var j = 0; j < 64; j++)
{
mask = mask << 1;
console.log(mask);
}
这会打印从0 到1073741824 的值,但随后会循环并开始打印0。
【问题讨论】:
标签: javascript
我需要在 JavaScript 中将一个值按位移动 64 次。但是 JavaScript 在 32 之后开始舍入。
例如:
for(var j = 0; j < 64; j++)
{
mask = mask << 1;
console.log(mask);
}
这会打印从0 到1073741824 的值,但随后会循环并开始打印0。
【问题讨论】:
标签: javascript
“在Java中,按位运算符处理整数。JavaScript没有整数。它只有双精度浮点数。因此,按位运算符将其数字操作数转换为整数,执行其业务,然后转换“ - 道格拉斯·克罗克福德,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 中有点 hacky,因此很烦人,您可能不得不做一些更聪明的事情,比如编写自己的 64 位函数。
【讨论】: