Другие языки программирования и технологии

Про цикл. int i = 5; i = ++i + ++i; Почему получается 14 а не 13?

В этом выражении сначала i инкрементируется, и становится равной 6, потом еще раз инкрементируется, и становится равной 7. А потом 7+7 = 14.
Для получения 13 напиши так: i = ++i + i++
Владимир Кузьмин
Владимир Кузьмин
45 384
Лучший ответ
не поленились бы указать язык.
допустим в джаве поулчите 13 и будет правильным, а в Си - смотря на какой компилятор нарвётесь...
Во-первых, к циклам это никакого отношения не имеет.
Во-вторых, в разных компиляторах может получиться и 14, и 13. В C++ порядок вычисления такой конструкции не определен, по стандарту он оставлен на усмотрение компилятора. Практически это означает, что такую конструкцию применять нельзя, неизвестно, что получится.

"даже попытки ответить на этот вопрос иначе как "undefined behaviour" демонстрируют недостаточную квалифицированность отвечающего"
Марат Габитов
Марат Габитов
56 928
потому что происходит такая фигня сначала идет увиличение i на 1, потом еще раз, а потом уже происходит сложение
есть такие понятия как постинкремент и преинкремент.
i++ -пост инкремент, он выполняется самым последним (на то он так и называется) .
++i - преинкремент, он выполняется раньше остальных операций.
В данном случае ситуация следующая:
i=5; когда мы выполняем первый раз инкрементирование то получаем выражение типа 6+ ++6, дальше выполняем следующую операцию инкрементирования и получаем 7+7= 14.
Дело все в том, что инкремент, аналогичен операции присваивания т. е. ++i = i+1; а значит все i в выражении увеличаться на 1.
т. е. как-то так:
i=(i=i+1)+(i=i+1); отсюда и получаем 14.
А как сказал Григорий, постинкремент дал бы случай вида:
i=(i=i+1)+i+1;
Юра Михайлов
Юра Михайлов
20 142