long m = 24 * 60 * 60 * 1000 * 1000;
Вышеупомянутый код создает переполнение и не печатает правильный результат.Переполнение происходит с умножением
long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;
Вышеуказанные 2 строки печатают правильный результат.
Мои вопросы являются-
- Имеет ли значение для компилятора, который я использую,
m2
илиm3
? - Как java начинает умножаться? Слева направо или справа налево? Вычисляет ли 24 * 60 сначала или 1000 * 1000?
oops- long m2 = 24L * 60 * 60 * 1000 * 1000 * 1000 * 1000; Длинные m3 = 24 * 60 * 60 * 1000 * 1000 * 1000 * 1000L; m2 и m3 не дают одинакового результата при повторном пересчете более 1000 раз в 1000 раз. Поэтому кажется, что умножение происходит слева направо. – rents
Правильно, используйте 'm2', поэтому каждое промежуточное умножение повышается до' long'. Умножение лево-ассоциативное, поэтому оно идет слева направо. – GriffeyDog
Умножение ассоциативно, поэтому порядок не имеет значения. Однако он вычисляется слева направо в тех случаях, когда это имеет значение, например вызовы методов, которые возвращают число. –