Я переношу некоторый Java-код на Python, но по какой-то причине результаты отличаются.
Джава
int vi = 3997125 * 3997125;
Output: -270075495
питон
vi = 3997125 * 3997125
Output: 15977008265625
Как мне добиться того же вывода, который Java возвращает в Python?
Ага. Немного странно, я знаю. @MichaelSzczesny
В Java int подписывается так, что все, что больше 2^31, будет рассматриваться как отрицательное число. Итак, если вывод > 2 ^ 31, вместо этого выполните 2 ^ 31 - (значение).
Фрагмент Java переполняется. Чтобы избежать этого, вы можете использовать long
s:
long vi = 3997125L * 3997125L;
Диапазон переменной, объявленной как тип int
, составляет от -2 147 483 648 до 2 147 483 647.
Итак, когда вы делаете
3997125 * 3997125 = 15,977,008,265,625
который выходит за пределы допустимого диапазона для типа int.
Как было предложено, вы можете изменить тип на long
.
Чтобы имитировать преобразование целого числа Python в 32-битное целочисленное значение с переполнением
def bit32(value):
shift = 1 << 32
return value % shift - shift if value.bit_length() >= 32 else value
bit32(3997125*3997125)
Вне:
-270075495
Обновлен мой ответ для работы с целыми числами без переполнения.
Вы хотите получить неправильный результат (переполнение) в python?