#java
#java
Вопрос:
здравствуйте, у меня есть вопрос о Java, почему следующий код возвращает странное значение?
System.out.println("Strange " (20 * 232792560)/20);
почему я получаю 18044195
?
Ответ №1:
Потому что (20 * 232792560)
переполняет диапазон int
и несколько раз обводит диапазон чисел, чтобы стать 360883904
. Затем это делится на 20
, чтобы дать вам результат, который вы видите.
Если вы хотите получить правильный результат, то вам нужно сделать:
System.out.println("Strange " (20 * 232792560L) / 20);
(Пометка литерала символом L
означает, что постоянная математика будет выполняться с помощью long
, а не с int
, так что переполнения больше не будет.)
Ответ №2:
Поскольку (20 * 232792560)
будет выполнено умножение на основе целых чисел, а результат, очевидно, находится вне int
диапазона, следовательно, значение будет усечено.
Комментарии:
1. э, да. он не сильно переполнен, как я только что увидел.
Ответ №3:
Потому что 20 * 232792560
не умещается в 4 байта (целочисленное значение).
Итак, вы получили:
20 * 232792560 = 360883904; // because of int overflow
360883904 / 20 = 18044195;