Приоритет операций C
В следующей таблице перечислены приоритеты и ассоциативность операций в C. Операции перечислены сверху вниз в порядке уменьшения приоритета.
| Приоритет | Оператор | Описание операции | Ассоциативность |
|---|---|---|---|
| 1 | ++ --
|
Суффиксные/постфиксные инкремент и декремент | Слева направо |
()
|
Вызов функции | ||
[]
|
Обращение к элементу массива | ||
.
|
Обращение к члену структуры или объединения | ||
−>
|
Обращение к члену структуры или объединения через указатель | ||
(type){list}
|
Составной литерал(C99) | ||
| 2 | ++ --
|
Префиксные инкремент и декремент | Справа налево |
+ −
|
Унарные плюс и минус | ||
! ~
|
Логическое НЕ и побитовое НЕ | ||
(type)
|
Приведение типа | ||
*
|
Разыменование | ||
&
|
Взятие адреса | ||
sizeof
|
Размер | ||
_Alignof
|
Выравнивание(C11) | ||
| 3 | * / %
|
Умножение, деление и остаток | Слева направо |
| 4 | + −
|
Сложение и вычитание | |
| 5 | << >>
|
Побитовые левый сдвиг и правый сдвиг | |
| 6 | < <=
|
Для операций сравнения < и ≤ соответственно | |
> >=
|
Для операций сравнения > и ≥ соответственно | ||
| 7 | == !=
|
Для сравнений = и ≠ соответственно | |
| 8 | &
|
Побитовое И | |
| 9 | ^
|
Побитовое XOR (исключающее или) | |
| 10 | |
|
Побитовое ИЛИ (включающее или) | |
| 11 | &&
|
Логическое И | |
| 12 | ||
|
Логическое ИЛИ | |
| 13 | ?:
|
Тернарное условие | Справа налево |
| 14 | =
|
Простое присваиваиние | |
+= −=
|
Присваивание через сумму и разность | ||
*= /= %=
|
Присваивание через произведение, частное и остаток | ||
<<= >>=
|
Присваивание через левый сдвиг и правый сдвиг | ||
&= ^= |=
|
Присваивание через побитовые И, исключающее ИЛИ и ИЛИ | ||
| 15 | ,
|
Запятая | Слева направо |
При лексическом разборе выражения любой оператор из некотрой строки будет теснее привязан (как при использовании скобок) к своим аргументам, чем любой другой, находящийся в строке ниже.
Операторы из одной ячейки (в одной ячейке могут быть перечислены несколько строк операторов) имеют одинаковый приоритет и группируются в указанном направлении. Например, выражение a=b=c разбирается как a=(b=c), а не как (a=b)=c из-за ассоциативности справа налево. Примечание: это не влияет на порядок вычисления подвыражений a, b и c.
См. также
Поряд вычисления аргументов операций во время выполнения программы.
| Основные операторы | ||||||
|---|---|---|---|---|---|---|
| присваивание | инкремент декремент |
арифметические | логические | сравнения | доступ к элементам |
другие |
|
|
|
|
|
|
|
|