Precedence (Order of Operations)
In the following table operators grouped together in a section have the same precedence. For example, the first four entries in this table (), [], ., and -> all share the same precedence. These four operators follow the rule of Left-to-Right associativity which is used as a tie breaker when two or more of these appear in the same expression. The next group of operators starting with + and ending with (type) all share the next level of precedence.
Operator | Description | Associativity |
---|---|---|
( ) [ ] . -> | Parenthesized Expression Array Subscript Structure Member Structure Pointer | Left - to - Right |
+ - ++ - - ! ~ * & sizeof (type) | Unary + and - (Postitive and Negative Signs) Increment and Decrement Logical NOT and Bitwise Complement Dereference (Pointer) Address of Size of Expression or Type Explicit Typecast | Right - to - Left |
* / % | Multiply, Divide, and Modulus | Left - to - Right |
+ - | Add and Subtract | Left - to - Right |
« » | Shift Left and Shift Right | Left - to - Right |
< <= > >= | Less Than and Less Than or Equal To Greater Than and Greater Than or Equal To | Left - to - Right |
== != | Equal To and Not Equal To | Left - to - Right |
& | Bitwise AND | Left - to - Right |
^ | Bitwise XOR | Left - to - Right |
| | Bitwise OR | Left - to - Right |
&& | Logical AND | Left - to - Right |
|| | Logical OR | Left - to - Right |
?: | Conditional Operator | Right - to - Left |
= += -= /= *= %= «= »= &= |= ^= | Assignment Addition and Subtraction Assignments Division and Multiplication Assignments Modulus Assignment Shift Left and Shift Right Assignments Bitwise AND and OR Assignements Bitwise XOR Assignment | Right - to - Left |
, | Comma Operator | Left - to - Right |
When expressions contain multiple operators, their precedence determines the order of evaluation
Expression | Effective Expression |
---|---|
a - b * c | a - (b * c) |
a + ++b | a + (++b) |
a + ++b * c | a + ((++b)*c) |
Associativity
If two operators have the same precedence, their associativity determines the order of evaluation.
Expression | Associativity | Effective Expression |
---|---|---|
x / y % z | Left - to - Right | (x / y) % z |
x = y = z | Right - to - Left | x = (y = z) |
~++x | Right - to - Left | ~(++x) |
You can rely on these rules, but it is good programming practice to explicitly group elements of an expression by using parentheses.