Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
Приоритет операций в языке Си и Си++

Приоритет операций в языке Си и Си++

19 Июл 2021

Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. Порядок выполнения операций может регулироваться с помощью круглых скобок.

Таблица 1. Приоритеты операций в языке Си/Си++.

В программах нередко можно встретить ошибки, связанные с тем, что точный приоритет операций легко забыть (статья на эту тему). Поэтому профессиональные разработчики не стесняются использовать дополнительные скобки. Это страхует от случайных ошибок и делает выражения более читабельными.

Примечание. В статическом анализаторе кода PVS-Studio реализовано несколько диагностик, таких как V648, которые помогают выявлять ошибки, связанные с приоритетами операций. Попробуйте проверить свой код.

Библиографический список

Популярные статьи по теме

Подписаться

Комментарии (3)

Guest 
06/11/2023, 22:06:31

Я что-то не понял. Согласно таблице приоритет постфиксного инкремента, чем у условного умножения и присваивания. То есть получается, что постфиксный инкремент выполнится раньше умножения при отсутствии скобок, и как следствие раньше присваивания. Но если я делаю, что-то вроде:

Short a =1

Short b = a++ * 2

то переменная b будет равна 2. Хотя по логике, если приоритет постфиксного инкремента выше, то сначала должен выполниться он и ответ должен быть 4.

Либо я не правильно понял таблицу, объясните, пожалуйста

Ответить

AlekseyG. 
08/11/2023, 14:26:59 для Guest

Здравствуйте!

С приоритетом операторов все именно так, как и описано в таблице. Однако нужно понять отличие префиксного и постфиксного инкрементов. Постараемся объяснить простым языком.

Префиксный инкремент (++a) модифицирует переменную и возвращает в качестве результата новое значение. Постфиксный инкремент (a++) также модифицирует переменную, но возвращает в качестве результата значение до модификации.

Возьмём в качестве примера ваш код. Если мы используем постфиксный инкремент:

short a = 1;

short b = a++ * 2;

То последовательность операций следующая:

1. Значение a увеличивается на 1.

2. В качестве левого операнда умножения подставляется значение ДО модификации (т.е. 1).

3. Вычисляется умножение 1 * 2, результат равен 2.

Теперь если мы применим префиксный инкремент:

short a = 1;

short b = ++a * 2;

То последовательность операций следующая:

1. Значение a увеличивается на 1.

2. В качестве левого операнда умножения подставляется значение ПОСЛЕ модификации (т.е. 2).

3. Вычисляется умножение 2 * 2, результат равен 4.

Ответить

Guest 
21/11/2023, 13:43:32 для AlekseyG.

Спасибо большое. Теперь понял суть и разницу инкрементов

Ответить

close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам