# Operator Precedence and Associativity

## Operator Precedence

Operator precedence describes the order in which C evaluates different operators in a complex expression. For example, in the expression y=10+5*20, which happens first? **Addition** or **Multiplication**? Operator precedence tells us the execution order of different operator. Precedence level of different operator is shown in Table below, operators which are closest to top are executed first.

Therefore, in our example above, **Multiplication** is done before **Addition** because looking at Table multiplication operator has higher precedence than addition.

## Operator Associativity

Operator associativity describes the order of execution of operators when they have same level of precedence. For example, in the expression y = 12* 20/5, which happens first? **Multiplication** or **Division**? Associativity can be either **left to right** or **right to left**. Associativity of different operator is shown in Table below.

Therefore, in our example above, **Multiplication** is done before **Division** because **Multiplication** and **Division** both have same precedence and have **left to right** associativity. So, evaluation starts from left i.e. first multiplication and then division.

**Note: ** Associativity is used only when operators are of same precedence need to be evaluated.

## Precedence and Associativity Table

Operator | Precedence | Associativity |
---|---|---|

Parenthesis (), Brackets [] | 1 | Left to Right |

++, --, unary minus (-), unary plus (+) | 2 | Right to Left |

*, /, % | 3 | Left to Right |

+, - | 4 | Left to Right |

<,>, <=,>= | 5 | Left to Right |

= =, != | 6 | Left to Right |

&& | 7 | Left to Right |

|| | 8 | Left to Right |

Ternary ?: | 9 | Right to Left |

=, +=, - =, *=, /=, %= | 10 | Right to Left |