_files/4af07a4b382aa20acda1ffb4bb75c973.png)
7.2.1 Operator precedence and associativity
When an expression contains multiple operators, the precedence of the
operators controls the order in which the individual operators are evaluated.
For example, the expression x
+
y
*
z
is evaluated as x
+
(y
*
z)
because the *
operator has higher precedence than the
binary +
operator. The precedence of an operator is
established by the definition of its associated grammar production. For example,
an additive-expression consists of a sequence of multiplicative-expressions
separated by +
or -
operators, thus
giving the +
and -
operators lower
precedence than the *
, /
, and %
operators.
The following table summarizes all operators in order of precedence from highest to lowest:
Section | Category | Operators |
---|---|---|
Section 7.5 | Primary | |
Section 7.6 | Unary | |
Section 7.7 | Multiplicative | |
Section 7.7 | Additive | |
Section 7.8 | Shift | |
Section 7.9 | Relational and type testing | |
Section 7.9 | Equality | |
Section 7.10 | Logical AND | |
Section 7.10 | Logical XOR | |
Section 7.10 | Logical OR | |
Section 7.11 | Conditional AND | |
Section 7.11 | Conditional OR | |
Section 7.12 | Conditional | |
Section 7.13 | Assignment |
When an operand occurs between two operators with the same precedence, the associativity of the operators controls the order in which the operations are performed:
- Except for the assignment operators, all binary operators are
left-associative, meaning that operations are performed from left to right.
For example,
x
+
y
+
z
is evaluated as(x
+
y)
+
z
. - The assignment operators and the conditional operator (
?:
) are right-associative, meaning that operations are performed from right to left. For example,x
=
y
=
z
is evaluated asx
=
(y
=
z)
.
Precedence and associativity can be controlled using parentheses. For
example, x
+
y
*
z
first multiplies
y
by z
and then adds the result to
x
, but (x
+
y)
*
z
first adds x
and y
and then multiplies the result by z
.