Содержание

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

В следующей таблице операторы сгруппированы по их приоритетам.

Тип выражения Операторы
первичное идентификатор
константа
стринг
(выражение)
постфиксное a[b]
f()
a.b a->b
a++ a--
унарное sizeof u sizeof( a )
++a --a
&a *a
+a -a ~a !a
приведение к типу (тип) a
мультипликативные a * b
a / b
a % b
аддитивные a + b
a - b
сдвига a << b
a >> b
отношения a < b
a > b
a <= b
a >= b
равенства a == b
a != b
побитовое И a & b
побитовое исключающее ИЛИ a ^ b
побитовое ИЛИ a | b
логическое И a && b
логическое ИЛИ a || b
условное *) a ? b : c
присвоения*) a = b
a += b a -= b
a *= b a /= b a %= b
a &= b a ^= b a |= b
a <<= b a >>= b
запятая a, b

*) выражения вычисляются справа налево

Операторы в таблице располагаются в порядке убывания приоритета. Все операторы включающие более одного операнда выполняются слева направо, за исключением условного оператора и оператора присваивания, которые выполняются справа налево. Операторы одного приоритета, за исключением оговорённых в соответствующих разделах, могут выполняться в любом порядке по выбору компилятора (при условии соблюдения алгебраических правил). В частности, компилятор для увеличения эффективности кода может перегруппировать подвыражения, которые оба и ассоциативны, и коммутативны, так, что смысл операндов (т.е. их типы и результаты) после перегруппировки не изменится.

Порядок любых побочных эффектов (например, присвоение или действия при вызове функции) также остаётся на усмотрение компилятора.