Xor Различно между Java и Flash Actionscript

В момента пиша 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"

Някаква идея как мога да разреша този проблем?

Благодаря


person user1564115    schedule 30.07.2012    source източник


Отговори (2)


Това е същият резултат, но различни представяния, тъй като вашите Java longs са 64-битови, докато вероятно в Actionscript работите с 32-битова аритметика:

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

Ако искате резултатите да съвпадат, използвайте int вместо long в Java кода.

person Paul R    schedule 30.07.2012

Изглежда, че ActionScript или прави изчислението в 32-битова аритметика, или, по-вероятно, операторът trace() форматира резултата, сякаш е 32-битов.

person Jim Garrison    schedule 30.07.2012