Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 13:43   #1
progdev
Пользователь
 
Регистрация: 22.11.2009
Сообщений: 19
Восклицание Простые операции,прошу помочь

Есть программа,вычисляющая число "i".Расставьте пожалуйста коментарии,

Код:
#include <iostream>
using namespace std;
int main(void){
	int i = 5;
	i = ++i + ++i;
	cout<<i;
}
Почему получаеться имено "14" ?
progdev вне форума Ответить с цитированием
Старый 22.11.2009, 13:55   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Приоритет операций такой:
Код:
i = (++i) + (++i);
Оно два раза производит инкремент, прежде чем сложить. Видимо, складывает оно новые значения переменной i.
Вообще, извращение какое-то...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 22.11.2009, 14:03   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,067
По умолчанию

Код:
i = ++i + ++i;
Это так называемое UB (Undefined behavior) - неопределённое поведение, если дословно перевести.
Никто не даст гарантии, что на разных компиляторах будет 14 получаться.
В данном случае 14 потому что выполняется 2 инкремента, т.е. i = 7 получается, ну а потом уже 7 + 7 = 14.
Не нужно писать такие выражения, если хочется создавать стабильный код.
pu4koff вне форума Ответить с цитированием
Старый 22.11.2009, 14:17   #4
progdev
Пользователь
 
Регистрация: 22.11.2009
Сообщений: 19
По умолчанию

А как по мне,так казалось что
Код:
i=5+5
А получилось 14
progdev вне форума Ответить с цитированием
Старый 22.11.2009, 14:25   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,067
По умолчанию

Цитата:
Сообщение от progdev Посмотреть сообщение
А как по мне,так казалось что
Код:
i=5+5
А получилось 14
А 5 тут кто увеличивать будет? Тут из возможных вариантов может быть только 6+7 или 6+6 на крайний случай. Лучше так не писать, чтобы потом не думать как это выражение разберёт компилятор.
pu4koff вне форума Ответить с цитированием
Старый 22.11.2009, 14:31   #6
progdev
Пользователь
 
Регистрация: 22.11.2009
Сообщений: 19
Радость

Цитата:
Сообщение от pu4koff Посмотреть сообщение
А 5 тут кто увеличивать будет? Тут из возможных вариантов может быть только 6+7 или 6+6 на крайний случай. Лучше так не писать, чтобы потом не думать как это выражение разберёт компилятор.
Понял,спасибо ))
Просто у моего друга стоял спам-бот ....с такой задачкой..
progdev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень прошу помочь! goggin Помощь студентам 1 15.12.2008 19:11
Прошу помочь с заданием =(( Lexxich Помощь студентам 1 14.06.2008 12:34
Прошу помочь. Оплачу. dreo Фриланс 8 22.12.2007 00:35
Прошу помочь с запросом MASTERKEY БД в Delphi 0 18.05.2007 15:15