When an expression contains multiple operators, the precedence of the operators control 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 +
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 |
7.5 | Primary | (x) x.y f(x) a[x] x++ x-- new
|
7.6 | Unary | + - ! ~ ++x --x (T)x |
7.7 | Multiplicative | * / % |
7.7 | Additive | + - |
7.8 | Shift | << >> |
7.9 | Relational | < > <= >= is |
7.9 | Equality | == != |
7.10 | Logical AND | & |
7.10 | Logical XOR | ^ |
7.10 | Logical OR | | |
7.11 | Conditional AND | && |
7.11 | Conditional OR | || |
7.12 | Conditional | ?: |
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:
x
+
y
+
z
is evaluated as (x
+
y)
+
z
.?:
) are right-associative, meaning that operations are performed from right to left. For example, x
=
y
=
z
is evaluated as x
=
(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
.