Приоритет операторов
Операторы — это символы, которые указывают компилятору на необходимость выполнения какой-нибудь операции с одним или несколькими операндами.
Операнд — это то, на что воздействует оператор.
Примеры:
3 + 7 // 3 и 7 — это операнды, а + — оператор.
i++ // i — операнд, ++ — оператор
*p // p — операнд, * — операторОдин и тот же символ в разных контекстах может указывать на разные операции, например, *, &, -, +.
Выражение может содержать несколько различных операторов. Порядок выполнения операций, задаваемых операторами, зависит от приоритета операторов. Операции, соответствующие операторам с более высоким приоритетом, выполняются первыми.
Таблица приоритетов операторов языка Си
1 приоритет
( )группирующие скобки и вызовы функции[]индексация массива.,->прямой и косвенный доступ к элементу структуры или объединения++,--постфиксные инкремент и декремент
2 приоритет (обратная ассоциативность, справа налево)
+,-унарные плюс и минус-!логическое отрицание~побитовое отрицание++,--префиксные инкремент и декремент&взятие адреса*косвенная адресация(type)приведение к типуsizeofполучение размера операнда
3 приоритет
*,/и%
4 приоритет
+,-бинарные сложение и вычитание
5 приоритет
<<,>>побитовые сдвиги влево и вправо
6 приоритет
<,<=,>,>=сравнения
7 приоритет
==,!=проверка равенства и неравенства
8 приоритет
&побитовое И
9 приоритет
^побитовое Исключающее ИЛИ
10 приоритет
|побитовое ИЛИ
11 приоритет
&&логическое И
12 приоритет
||логическое ИЛИ
13 приоритет (обратная ассоциативность, справа налево)
? :условный оператор
14 приоритет (обратная ассоциативность, справа налево)
=,+=,-=,*=,\=,%=,>>=,<<=,&=,^=,|=присваивания
15 приоритет
,
Ассоциативность операторов
Если в одном выражении встречаются два оператора с одинаковым приоритетом, то порядок их выполнения определяется ассоциативностью. В большинстве случаев вычисления производятся слева направо (прямая ассоцитивность).
Примеры:
int x = 10 / 2 * 5; // = 25, т.к. для операторов / и * ассоциативность прямая,
// вычисляются слева направо. Эквивалентно выражению (10 / 2) * 5 Группы операторов, имеющие обратную ассоциативность (вычисляются справа налево), обозначены в таблице выше.