отливка long
к int
осуществляется путем удаления верхнего 32 бита long
. Если значение long
больше Integer.MAX_VALUE
(2147483647) или меньше Integer.MIN_VALUE
(-2147483648), то чистый эффект заключается в том, что вы теряете значимые биты, а результат - «мусор».
Сказав, что код, который вы поставляется не ведет себя, как вы говорите, что делает ... если вы скомпилировать и запустить его правильно. Первоначальная версия должна печатать неожиданный номер ... но не ноль. Модифицированная версия должна печатать 1000000, как ожидалось.
... есть способ, которым я могу хранить длинные числа больше Integer.MAX_VALUE внутри Int числа?
No.
Ну строго да ... в некоторых обстоятельствах. Вы могли бы сделать что-то для отображения чисел, например, если вы знаете, что ваши номера всегда находятся в диапазоне A
к B
и B - A
меньше 2 , то вы могли бы карту в этом диапазоне в long
к int
по вычитая из него A
.
Однако математически невозможно определить такое отображение, если размер области чисел вы хранящие в long
больше, чем 2 . Обычно это так.
Невозможно воспроизвести: https://ideone.com/R4jZJ2 – Jack
Вы получаете переполнение 'int', если ваше' long' значение больше, чем 'int' может обрабатывать. –
Какая версия Java? Когда я запускаю свой код, я получаю '1215752192' –