1

我目前正在编写一个 Java 来模拟 Flash ActionScript 之类的返回值。

这是我让两个应用程序返回不同值的问题。

在 ActionSript 3.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)

如果您希望结果匹配,请在 Java 代码中使用int而不是。long

于 2012-07-30T21:16:26.017 回答
1

看起来 ActionScript 要么在 32 位算术中进行计算,要么更可能的是,该trace()语句正在格式化结果,就好像它是 32 位一样。

于 2012-07-30T21:23:24.900 回答