В этом выражении сначала i инкрементируется, и становится равной 6, потом еще раз инкрементируется, и становится равной 7. А потом 7+7 = 14.
Для получения 13 напиши так: i = ++i + i++
Другие языки программирования и технологии
Про цикл. int i = 5; i = ++i + ++i; Почему получается 14 а не 13?
не поленились бы указать язык.
допустим в джаве поулчите 13 и будет правильным, а в Си - смотря на какой компилятор нарвётесь...
допустим в джаве поулчите 13 и будет правильным, а в Си - смотря на какой компилятор нарвётесь...
Во-первых, к циклам это никакого отношения не имеет.
Во-вторых, в разных компиляторах может получиться и 14, и 13. В C++ порядок вычисления такой конструкции не определен, по стандарту он оставлен на усмотрение компилятора. Практически это означает, что такую конструкцию применять нельзя, неизвестно, что получится.
"даже попытки ответить на этот вопрос иначе как "undefined behaviour" демонстрируют недостаточную квалифицированность отвечающего"
Во-вторых, в разных компиляторах может получиться и 14, и 13. В C++ порядок вычисления такой конструкции не определен, по стандарту он оставлен на усмотрение компилятора. Практически это означает, что такую конструкцию применять нельзя, неизвестно, что получится.
"даже попытки ответить на этот вопрос иначе как "undefined behaviour" демонстрируют недостаточную квалифицированность отвечающего"
потому что происходит такая фигня сначала идет увиличение 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;
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;
Похожие вопросы
- объясните как именно работает цикл (int i = 0; i < N; i++) в этом коде, почему нельзя написать i+1, вместо i++
- Помогите разобраться с кодом. Ошибка в строчке for (int i = 0, i > 100, i++) {
- Как осуществить операцию сложения в с++ без операции присваивания ? int a=5; int b=6; int c=a+b; ( без "= ")
- for(i=1,n,i++). Что делает этот цикл? Объясните по порядку..
- почему так. почему?? х=5 у=(++х)+(++х) ответ у=14 как считать?
- C++, как сделать задержку выполнения цикла, например на 5 сек.
- C++. Никогда не выполняется условие (stroka.SubString(i,1)==" ") почему-то.
- while(!((str[i]>='0'&&str[i]<='9')||str[i]=='\0')) как перевести на человеческий язык это условие? - Язык си
- Вопрос по Си. if ((i++)==10) и i++ if (i==10) будет ли первый пример работать быстрее чем второй?
- Excel В одной ячейке значение к примеру 20. Необходимо выполнить (1+2)^i+1 (i+1 должен продолжаться до 20 включ.)