В этом руководстве вы узнаете о приоритете и ассоциативности операторов с помощью примеров.
Приоритет операторов
Приоритет операторов определяет, какой оператор выполняется первым, если в выражении более одного оператора.
Рассмотрим пример:
int x = 5 - 17* 6;
В языке C приоритет *
выше, чем у -
и =
. Следовательно, 17 * 6
сначала оценивается. Затем выражение с участием -
оценивается как -
более высокий приоритет, чем приоритет =
.
Вот таблица приоритетов операторов в порядке возрастания. О свойстве ассоциативности мы поговорим чуть позже.
Таблица приоритетов операторов и ассоциативности
Оператор | Значение оператора | Ассоциативность |
---|---|---|
() () -> . | Функциональный вызов Ссылка на элемент массива Косвенный выбор элемента Прямой выбор элемента | Слева направо |
! ~ + - ++ - & * sizeof (тип) | Логическое отрицание Побитовое (1) дополнение Унарный плюс Унарный минус Приращение Уменьшение Разыменование (адрес) Ссылка на указатель Возвращает размер объекта Приведение типов (преобразование) | Справа налево |
* / % | Умножить и разделить остаток | Слева направо |
+ - | Двоичный плюс (сложение) Двоичный минус (вычитание) | Слева направо |
<< >> | Сдвиг влево Сдвиг вправо | Слева направо |
< <= > > = | Меньше Меньше или равно Больше Больше или равно | Слева направо |
== ! = | Равно Не равно | Слева направо |
& | Побитовое И | Слева направо |
^ | Побитовое исключающее ИЛИ | Слева направо |
| | Побитовое ИЛИ | Слева направо |
&& | Логическое И | Слева направо |
|| | Логическое ИЛИ | Слева направо |
?: | Условный оператор | Справа налево |
= * = / = % = + = - = & = = | = << = >> = | Простое присвоение Назначить продукт Назначить частное Назначить остаток Назначить сумму Назначить разницу Назначить побитовое И Назначить поразрядное ИЛИ Назначить побитовое ИЛИ Назначить сдвиг влево Назначить сдвиг вправо | Справа налево |
, | Разделитель выражений | Слева направо |
Ассоциативность операторов
Ассоциативность операторов определяет направление, в котором вычисляется выражение. Например,
b = a;
Здесь значение a присваивается b, а не наоборот. Это потому, что ассоциативность =
оператора справа налево.
Кроме того, если присутствуют два оператора с одинаковым приоритетом (приоритетом), ассоциативность определяет направление, в котором они выполняются.
Рассмотрим пример:
1 == 2! = 3
Здесь операторы ==
и !=
имеют одинаковый приоритет. И их ассоциативность слева направо. Следовательно, 1 == 2
выполняется первым.
Выражение выше эквивалентно:
(1 == 2)! = 3
Примечание. Если в инструкции есть несколько операторов, вы можете использовать круглые скобки, ()
чтобы сделать код более читабельным.