JavaRush /Java блог /Архив info.javarush /Вопрос по арифметическим операторам
zamoroka
8 уровень

Вопрос по арифметическим операторам

Статья из группы Архив info.javarush
Есть код: int i = 1; i = i++ + (( i > 2 )? i++: (i++ * i++)) + i++ ; System.out.println(i); на выход получаем 11. Почему? Никак не могу понять.
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Sis Уровень 32
28 октября 2014
читаем про порядок операций. i++ выполняется раньше чем арифметические (+/*) но после того как число было положено в регистр.
парсим это выражение

1) первое слагаемое (i++) кладется в ячейку. Положили «1», переменная i увеличивается, i=2
2) идет сравнение (i > 2). Результат — false. Значит берем второй блок.
3) вычисляем второе слагаемое. (i++ * i++)) Не буду расписывать, но общее правило — сперва в ячейку кладется текущее значение i а потом оно инкрементируется. Результат выглядит так: (2 * 3) = 6. Итог — второе слагаемое 6. В конце операции i = 4;
4) третье слагаемое простое. i++. оно равно 4, после вычисления i = 5;
5) финальное суммирование. i = 1 + 6 + 4 = 11