Привет всем
Извините если вопрос уже такой был но в поиске ничего не нашел.
Почему код выдает "2"
int x = 0;
x = x+ x++ + ++x;
System.out.println(x);
в какй последовательности тут выполняются операторы?
Спасибо
Здравствуйте, serb, Вы писали:
S>Привет всем
S>Извините если вопрос уже такой был но в поиске ничего не нашел.
S>Почему код выдает "2"
S>S> int x = 0;
S> x = x+ x++ + ++x;
S> System.out.println(x);
S>
S>в какй последовательности тут выполняются операторы?
это можно расписать вот так
x = x+ x++ + ++x
0 = 0 + 0 + 2
Почитай разницу между ++x и x++
в первом случаи(++х) сначало переменная x прибавляет единицу, а потом присваивает значение, а во втором(х++) сначало присваивается значение, а потом увеличивается на единицу.
Здравствуйте, serb, Вы писали:
S>Привет всем
S>Извините если вопрос уже такой был но в поиске ничего не нашел.
S>в какй последовательности тут выполняются операторы?
S>Спасибо
Вообще — то
спецификацию не плохо бы почитать..
Здравствуйте, serb, Вы писали:
S>Привет всем
S>Извините если вопрос уже такой был но в поиске ничего не нашел.
S>Почему код выдает "2"
S>S> int x = 0;
S> x = x+ x++ + ++x;
S> System.out.println(x);
S>
S>в какй последовательности тут выполняются операторы?
S>Спасибо
1. Все операторы высчитываются до его применения;
2. Все операторы высчитываются слева на право до того, как к ним будет применен арифметический бинарный оператор.
Таким образом
x + ((x++) + (++x)) // x == 0
0 + ((x++) + (++x)) // x == 0
0 + ((0) + (++x)) // x == 1
0 + ((0) + (++1)) // x == 1
0 + ((0) + (2)) // x == 1
Здравствуйте, LeonidV, Вы писали:
S>>Почему код выдает "2"
LV>1. Все операторы высчитываются до его применения;
LV>2. Все операторы высчитываются слева на право до того, как к ним будет применен арифметический бинарный оператор.
LV>Таким образом
LV>x + ((x++) + (++x)) // x == 0
LV>0 + ((x++) + (++x)) // x == 0
LV>0 + ((0) + (++x)) // x == 1
LV>0 + ((0) + (++1)) // x == 1
LV>0 + ((0) + (2)) // x == 1
Тут теряется постинкремент. Это и надо объяснить.
Вот на этом примере:
int x = 0;
x = x++;
//sout(x);