вопрос по операциям сложения в С#
От: blind_petrik  
Дата: 10.01.08 16:49
Оценка: :))
Имеем код:

int i=1;
i += ++i;


после выполнения получаем i = 3;

меняем код:

int i=1;
i += i++;


после выполнения получаем i = 2;

Вопрос: почему так?
Re: вопрос по операциям сложения в С#
От: Lloyd Россия  
Дата: 10.01.08 16:53
Оценка: 4 (1)
Здравствуйте, blind_petrik, Вы писали:

_>Вопрос: почему так?


Вот поэтому и не надо так писать.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: вопрос по операциям сложения в С#
От: blind_petrik  
Дата: 10.01.08 16:58
Оценка:
L>Вот поэтому и не надо так писать.

Это и так понятно. Писать так не собираюсь.
Но все равно. Мне хочется понять почему получается так как получается. Интересно мне
Re[3]: вопрос по операциям сложения в С#
От: Lloyd Россия  
Дата: 10.01.08 17:32
Оценка: +1
Здравствуйте, blind_petrik, Вы писали:

L>>Вот поэтому и не надо так писать.


_>Это и так понятно. Писать так не собираюсь.

_>Но все равно. Мне хочется понять почему получается так как получается. Интересно мне

Ща попробую как я это понимаю. Если что, более опытные товарищи поправят.
1 случай:

i += ++i;

эквивалентно
i = i + (++i);

Начинаем вычислять "i + (++i)" учитывая что i = 1.
1 шаг: заместо 1-го i ставим 1.
Получаем 1 + (++ i), при этом все так же i = 1.

2 шаг: вычисляем ++i. Значение выражение равно 2, кроме того переменная i становится равной 2.
Получаем 1 + 2, при этом i = 2.

Итог:
i = 3;


2 случай:
i += i++;

эквивалентно
i = i + (i++);

Начинаем вычислять "i + (i++)" учитывая что i = 1.
1 шаг: заместо 1-го i ставим 1.
Получаем 1 + (i++), при этом все так же i = 1.

2 шаг: вычисляем i++. Значение выражение равно 1, кроме того переменная i становится равной 2.
Получаем 1 + 1, при этом i = 2.

Итог:
i = 2;
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re: вопрос по операциям сложения в С#
От: _d_m_  
Дата: 11.01.08 00:42
Оценка:
Здравствуйте, blind_petrik, Вы писали:

_>Вопрос: почему так?


Это отличия префиксной постфиксной формы инкремента/декремента:
1) в префиксной сначала инкремент — возвращается полученный результат;
2) в постфиксной возвращается результат до вычисления инкремента.
Re: вопрос по операциям сложения в С#
От: usov  
Дата: 11.01.08 07:56
Оценка: -2 :)
Здравствуйте, blind_petrik, Вы писали:

_>Вопрос: почему так?


Undefined behavior... но я не нашел описание описание этого issue в стандарте
Re[2]: вопрос по операциям сложения в С#
От: Mab Россия http://shade.msu.ru/~mab
Дата: 11.01.08 11:04
Оценка:
Здравствуйте, usov, Вы писали:

U>Undefined behavior... но я не нашел описание описание этого issue в стандарте

Это Вы про какой язык?
Re: вопрос по операциям сложения в С#
От: Аноним  
Дата: 11.01.08 12:21
Оценка:
_>Вопрос: почему так?

i++ возвращает i и увеличивает i на единицу
++i возвращает i+1 и увеличивает i на единицу

Это еще по-моему чуть ли не в С так было
Re: вопрос по операциям сложения в С#
От: _Morpheus_  
Дата: 11.01.08 12:39
Оценка:
Здравствуйте, blind_petrik, Вы писали:

_>Имеем код:


_>
_>int i=1;
_>i += ++i;
_>


_>после выполнения получаем i = 3;


_>меняем код:


_>
_>int i=1;
_>i += i++;
_>


_>после выполнения получаем i = 2;


_>Вопрос: почему так?


потому что ++i и i++ это разные операции, первая префиксная, вторая постфиксная, они не эквивалентны. Первая прибавляет к i единицу и возвращает новое значение i, вторая увеличивает i на единицу и возвращает значение i, которое было до прибавления единицы.
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.