Precedence, Associativity¶
Summary: Operators¶
Operators seen thus far
Arithmetic (unary and binary)
Comparison
Boolean
Bitwise
Assignment (combined)
Conditional expression
Operators: Precedence und Associativity (1)¶
Operator Table
Ordered by precedence (strongest binding first)
Left- or right associativity at equal precedence
Attention
Precedence und associativity often not intuitive
E.g.:
x | y < z
is evaluated asx | (y < z)
⟶ difficult to comprehend and remember
Use braces to make precedence explicit
⟶ for yourself and for your successor
Operators: Precedence und Associativity (2)¶
Operator |
Associativity |
|
---|---|---|
highest |
|
left |
|
right (unary operators) |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
left |
|
|
right |
|
|
right |
|
lowest |
|
left |
More Warnings¶
The order in which operands are evaluated is unspecified (compiler dependent)
x = f() + g(); /* DANGER! */
The order in which function parameters are evaluated is unspecified (compiler dependent)
f(++i, i); /* DANGER! */
a[i] = i++; /* MORE DANGER */