JavaScript 移位

JavaScript bit-shifting

我想将这个无符号数:1479636484000 向右移动 7 位。这在 JavaScript 中可行吗?

两者都

1479636484000 >> 7

1479636484000 >>> 7

returns 一个不正确的答案(对我来说)。正确答案应该是 11559660031。 我想这里涉及到一些符号位,也许数字太大而无法支持。但是有什么巧妙的方法可以解决这个问题吗?

JavaScript 中的按位运算首先将数字截断为 32 位整数。你的数字太大了。 "clever way" 解决该限制的方法是实现您自己的数字库。

请注意,浮点数除以 128 会得到正确答案(如果您舍弃分数)。

您可以使用带有数字的字符串并删除最后 7 个字符并将其转换回数字。

console.log((1479636484000).toString(2));
console.log((11559660031).toString(2));
console.log((1479636484000).toString(2).slice(0, -7));
console.log(parseInt((1479636484000).toString(2).slice(0, -7), 2));