Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
1

Приоритеты операций

31.01.2020, 22:54. Показов 1105. Ответов 10
Метки нет (Все метки)

Почему в таблице приоритета операций постфиксный инкремент(декремент) имеет приоритет 2, если должен иметь приоритет намного меньше? Умножение в той же таблице имеет приоритет 5, значит такой код должен в первый раз выдавать результат 10, а во второй раз - 15. Но это так не работает! Значит операция пост-инкремента имеет меньший приоритет, чем умножение. Как это понимать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int a = 5;
    int b = 2;
 
    cout << a * b << endl;
 
    cout << a << endl;
    cout << b << endl;
 
    cout << a * b++ << endl;
 
    cout << a << endl;
    cout << b << endl;
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2020, 22:54
Ответы с готовыми решениями:

приоритеты операций
Интересную ошибку нахожу в книгах по части приоритетов операций в C++: например здесь и здесь...

приоритеты операций
cout &lt;&lt; (5 &lt;&lt;3); что это за знак &lt;&lt; и где можно узнать приоритеты всех (или основных) операций в...

Странные приоритеты операций
Привет! Есть код: int i,j = i = 0; int a = 2 + i++; int b = 2 + ++j; std::cout &lt;&lt; a...

Приоритеты выполнения перегрузок операций
Всем привет. Скажите как себя будет вести программа в следующей ситуации и чем это...

10
Продавец времени
6441 / 3442 / 797
Регистрация: 12.03.2015
Сообщений: 16,444
31.01.2020, 22:59 2
Лучший ответ Сообщение было отмечено Farnik как решение

Решение

Цитата Сообщение от Farnik Посмотреть сообщение
Значит операция пост-инкремента имеет меньший приоритет, чем умножение. Как это понимать?
Пост-инкремент на то и "пост", т.к. выполняется после чтения значения переменной, которую он инкрементирует.
1
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
31.01.2020, 23:00  [ТС] 3
Verevkin, но почему у него такой высокий приоритет, разве он не должен быть меньше остальных?
0
457 / 311 / 60
Регистрация: 24.09.2017
Сообщений: 1,762
Записей в блоге: 6
31.01.2020, 23:00 4
Цитата Сообщение от Farnik Посмотреть сообщение
операция пост-инкремента имеет меньший приоритет, чем умножение.
Конечно, т,к. это сложение. Поэтому измените код:
C++
1
cout << a * (b++) << endl;
0
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
31.01.2020, 23:01  [ТС] 5
Argus19, я понимаю как это работает. Я не могу понять, почему в таблице приоритетов у пост-инкремента приоритет 2?
0
Продавец времени
6441 / 3442 / 797
Регистрация: 12.03.2015
Сообщений: 16,444
31.01.2020, 23:04 6
Цитата Сообщение от Farnik Посмотреть сообщение
но почему у него такой высокий приоритет
По качану!

Цитата Сообщение от Farnik Посмотреть сообщение
разве он не должен быть меньше остальных?
Нет.
0
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
31.01.2020, 23:10  [ТС] 7
Цитата Сообщение от Verevkin Посмотреть сообщение
Пост-инкремент на то и "пост", т.к. выполняется после чтения
Если я правильно понял, то оператор ++ сначала возвращает значение, а уже потом увеличивает значение переменной. Правильно?
0
Продавец времени
6441 / 3442 / 797
Регистрация: 12.03.2015
Сообщений: 16,444
31.01.2020, 23:20 8
Цитата Сообщение от Farnik Посмотреть сообщение
Если я правильно понял, то оператор ++ сначала возвращает значение, а уже потом увеличивает значение переменной. Правильно?
Ну как-то так, да. Воспринимай это, как функцию:
C++
1
2
3
4
5
6
inline int post_inc(int &x)
{
  int temp = x;
  x += 1;
  return temp;
}
А пред-инкремент/декремент - наоборот.
1
15350 / 8298 / 2014
Регистрация: 30.01.2014
Сообщений: 14,169
31.01.2020, 23:27 9
Цитата Сообщение от Farnik Посмотреть сообщение
оператор ++ сначала возвращает значение, а уже потом увеличивает значение переменной. Правильно?
Нет. Инкрементирует он сразу, просто возвращает он старое значение, которое было до инкремента.
Псевдокод
C++
1
2
3
int tmp = a;
a = a + 1;
return tmp;
1
Don't worry, be happy
17259 / 10125 / 1961
Регистрация: 27.09.2012
Сообщений: 25,336
Записей в блоге: 1
31.01.2020, 23:57 10
Цитата Сообщение от Farnik Посмотреть сообщение
Значит операция пост-инкремента имеет меньший приоритет, чем умножение. Как это понимать?
Выражение a * b++ расценивается как a * (b++).
Если приоритет инкремента будет меньше, то
a * b++ нужно расценивать как (a * b)++.
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
01.02.2020, 04:53 11
Цитата Сообщение от Farnik Посмотреть сообщение
Argus19, я понимаю как это работает. Я не могу понять, почему в таблице приоритетов у пост-инкремента приоритет 2?
Вы правы. так не должно быть и Вы должны спасти мир и придумать новый язык программирования
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2020, 04:53

Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей)
Расставить приоритеты операций и вычислить значение заданного выражения, используя форматы...

Приоритеты операций
Доброго времени суток! Я недавно начал изучать С++. Читаю книгу &quot;Липпман. С++ для начинающих&quot;. И...

Приоритеты потоков
Здравствуйте, пишу две программы, в одной из которых обработка данных просто делится на потоки, а в...

Стек и приоритеты
Ошибок при компиляции не возникает, но при проверке не выдает адресов элементов и их данных. Прошу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru