Отличия Xor между Java и Flash Actionscript

В настоящее время я пишу 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"

Любая идея, как я могу решить эту проблему?

Спасибо


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


Ответы (2)


Это тот же результат, но разные представления, потому что ваши Java long являются 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