2010-03-03 22 views
21

我有一个非常大的数字:5799218898.并且想要将它右移到13位。
所以,Windows的计算器或Python给我:javascript中的位移

 
5799218898 >> 13 | 100010100100001110011111100001 >> 13 
70791   | 10001010010000111 

正如预期的那样。

但使用Javascript:

 
5799218898 >> 13 | 100010100100001110011111100001 >> 13 
183624   | 101100110101001000 

我想这是因为在JavaScript内部整数表示的,但无法找到任何东西。

+3

正确的答案实际上是707912(10101100110101001000),这使得前两个二进制数字变得更清晰。 – Miles

回答

25

在ECMAScript(Javascript)中,按位操作始终为32位。因此5799218898被切成32位,变成1504251602.该整数>> 13给出183624.

在Python中,它们是任意长度的整数。所以没有问题。

(和Windows计算器的数字是64位,足以胜任5799218898.)

(和正确的答案应该是707912.)

+0

谢谢,就是这样。看起来像我可以在python中模拟这种行为(5799218898&0xFFFFFFFF)>> 13 – Andrew

2

(5799218898)你拥有的数量超过32位。你没有提到你正在测试的JavaScript引擎,但很可能它是32位的。

要进行测试,请在数字的开头修剪“5”,以便落入32位边界内。那么你的转变应该很好。

+1

我在64位系统上使用Firefox 3.6 – Andrew

+7

所有JavaScript引擎都使用64位浮点数,并将其转换为32位整数操作,而不管架构如何。它在ECMAScript标准中定义。 –

1

作为尼古拉斯Zakas states

即使JavaScript的号码 技术上存储在64位,就好像它们是32位 每当位运算符是参与 整数 值被处理。