C Приоритет и ассоциативность операторов: определение и примеры

В этом руководстве вы узнаете о приоритете и ассоциативности операторов с помощью примеров.

Приоритет операторов

Приоритет операторов определяет, какой оператор выполняется первым, если в выражении более одного оператора.

Рассмотрим пример:

 int x = 5 - 17* 6;

В языке C приоритет *выше, чем у -и =. Следовательно, 17 * 6сначала оценивается. Затем выражение с участием -оценивается как -более высокий приоритет, чем приоритет =.

Вот таблица приоритетов операторов в порядке возрастания. О свойстве ассоциативности мы поговорим чуть позже.

Таблица приоритетов операторов и ассоциативности

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

Ассоциативность операторов

Ассоциативность операторов определяет направление, в котором вычисляется выражение. Например,

 b = a;

Здесь значение a присваивается b, а не наоборот. Это потому, что ассоциативность =оператора справа налево.

Кроме того, если присутствуют два оператора с одинаковым приоритетом (приоритетом), ассоциативность определяет направление, в котором они выполняются.

Рассмотрим пример:

 1 == 2! = 3

Здесь операторы ==и !=имеют одинаковый приоритет. И их ассоциативность слева направо. Следовательно, 1 == 2выполняется первым.

Выражение выше эквивалентно:

 (1 == 2)! = 3

Примечание. Если в инструкции есть несколько операторов, вы можете использовать круглые скобки, ()чтобы сделать код более читабельным.

Интересные статьи...