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








