2010-03-03 21 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位 每當位運算符是參與 整數 值被處理。