Вопрос по ++
От: serb Россия  
Дата: 26.05.07 10:47
Оценка:
Привет всем
Извините если вопрос уже такой был но в поиске ничего не нашел.

Почему код выдает "2"

   int x = 0;
   x = x+ x++ + ++x;
   System.out.println(x);



в какй последовательности тут выполняются операторы?

Спасибо
Re: Вопрос по ++
От: unkis  
Дата: 26.05.07 11:12
Оценка:
Здравствуйте, 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 прибавляет единицу, а потом присваивает значение, а во втором(х++) сначало присваивается значение, а потом увеличивается на единицу.
Re: Вопрос по ++
От: jitm  
Дата: 26.05.07 11:36
Оценка:
Здравствуйте, serb, Вы писали:

S>Привет всем

S>Извините если вопрос уже такой был но в поиске ничего не нашел.

S>в какй последовательности тут выполняются операторы?


S>Спасибо


Вообще — то спецификацию не плохо бы почитать..
Re: Вопрос по ++
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 27.05.07 20:05
Оценка:
Здравствуйте, 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
http://jvmmemory.com — простой способ настройки JVM
Re[2]: Вопрос по ++
От: aefimov Россия
Дата: 28.05.07 07:00
Оценка:
Здравствуйте, 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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.