2012-07-30 89 views
1

我目前正在編寫一個Java來模擬Flash ActionScript的返回值。Xor Java和Flash Actionscript之間的差異

這是我得到的兩個應用程序返回不同的值的問題。

在Actionscript中3.0

k = 942945590; 
z = 3180323136; 

trace(k^z); 

結果將返回 「-2051287946」

當我試圖做到這一點在Java中。

long k = 942945590L; 
    long z = 3180323136L; 
System.out.println (k^z); 

結果返回正值,而不是「2243679350」

任何想法,我怎麼能解決這個問題呢?

感謝

回答

2

這是同樣的結果,但不同的表現,因爲你的Java long s爲64位,而想必在ActionScript中,您與32位運算作業:

-2051287946 ==   0x85BBD476 (32 bit signed 2's complement) 
2243679350 == 0x0000000085BBD476 (64 bit signed 2's complement) 

如果你希望結果匹配,然後在Java代碼中使用int而不是long

1

看起來像ActionScript是以32位算法進行計算,或者更可能是trace()語句格式化結果,就好像它是32位一樣。