2014-02-13 31 views
1

考慮下面的代碼:數字對象上的二進制數學限於32位?

var combined:Number = Number(4294967296) | Number(2403025069); 
var testLimit:Number = 6697992365; 
trace("Combined is:", combined, "should be", testLimit); 

輸出是:

組合是:-1891942227應該是6697992365

爲什麼?我以爲數的數據類型可以容納64位整數(okay-真正52位,但上面的數字是遠不及限制)

回答

1

documentation

|位或運算符

將表達式1和表達式2轉換爲32位無符號整數,並在表達式1或表達式2的相應位爲1的每個位位置放置一個1.

...

的結果被解釋爲一個32位的二的補數,因此結果是在範圍內的整數 -2147483648到2147483647

+0

Ewwww ....所以如何做到這一點對於64位?我看到有幾個BigInteger類型的庫...不知道它們是否支持按位或? – davidkomer

+0

n/m,創建新的問題 - http://stackoverflow.com/questions/21758669/converting-2x32-bit-uint-number – davidkomer