我需要在 JavaScript 中将一个值按位移动 64 次。但是 JavaScript 在 32
之后开始舍入。
例如:
for(var j = 0; j < 64; j++)
{
mask = mask << 1;
console.log(mask);
}
这打印值从 0
到 1073741824
但随后开始打印 0
。
原文由 sandi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要在 JavaScript 中将一个值按位移动 64 次。但是 JavaScript 在 32
之后开始舍入。
例如:
for(var j = 0; j < 64; j++)
{
mask = mask << 1;
console.log(mask);
}
这打印值从 0
到 1073741824
但随后开始打印 0
。
原文由 sandi 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答889 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
“在 Java 中,按位运算符使用整数。JavaScript 没有整数。它只有双精度浮点数。因此,按位运算符将它们的数字操作数转换为整数,完成它们的工作,然后再将它们转换回来。在大多数语言中,这些运算符非常接近硬件并且非常快。在 JavaScript 中,它们与硬件非常远并且非常慢。JavaScript 很少用于进行位操作。” - Douglas Crockford, Javascript:好的部分
关键是您真的没有任何理由使用按位运算符。只需乘以或除以 2^numbits。
你的代码应该是:
或者一般来说:
你明白了。