2016-11-20 25 views
1

我想将这个无符号数字:1479636484000 7位向右移。这是可能的JavaScript?JavaScript位移

两个

1479636484000 >> 7 

1479636484000 >>> 7 

返回不正确的答案(对我来说)。正确的答案应该是11559660031. 我想这里有一些符号位,也许这个数字太大而无法支持。但是有什么聪明的方法来解决它?

+0

是,按位轮换着JS是可能的,见https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators。虽然我不确定是否有一定的语法来移位x位。我其实从来没有使用过这个功能。 –

+0

[如何在javascript中对比32位长的变量按位进行AND操作?](http://stackoverflow.com/questions/3637702/how-to-do-bitwise-and-in-javascript-on -variables-that-long-than-32-bit) – SeinopSys

+0

我不认为这是重复的,因为这是除法和不和。下面的答案不适用于按位和解决方案... – HelloWorld

回答

1

JavaScript中的按位操作通过将数字截断为32位整数开始。你的号码太大了。解决这个限制的“巧妙方式”是实现你自己的数字库。

请注意,浮点除以128会得到正确的答案(如果删除小数部分)。

+0

~~(n/128)不起作用。 Math.trunc(n/128)应该可以工作,但我没有ECMA 6,所以这对我没有帮助。但是,n/128 - n/128%1确实有效!谢谢:) – HelloWorld

+0

对于'〜'运算符,和位移运算符一样,它们会执行相同的32位截断。 'Math.floor()'将会从浮点值中删除分数。 – Pointy

1

您可以使用带有数字的字符串并删除最后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));

+0

有趣,但我去了n/128 - n/128%1 :) – HelloWorld