1

私は現在、FlashActionScriptのような戻り値をシミュレートするJavaを作成しています。

これが、両方のアプリケーションが異なる値を返すようになった問題です。

ActionSript3.0の下で

k = 942945590;
z = 3180323136;

trace(k ^ z);

結果は「-2051287946」を返します

Javaでやろうとすると。

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

結果は「2243679350」の代わりに正の値を返します

この問題をどのように解決できますか?

ありがとう

4

2 に答える 2

2

Javalongは 64 ビットですが、おそらく Actionscript では 32 ビット演算を使用しているため、結果は同じですが表現が異なります。

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

結果を一致させたい場合は、int代わりにlongJava コードで使用します。

于 2012-07-30T21:16:26.017 に答える
1

ActionScript が 32 ビット演算で計算を行っているか、trace()ステートメントが結果を 32 ビットであるかのようにフォーマットしている可能性が高いようです。

于 2012-07-30T21:23:24.900 に答える