# 7.2.1 Operator precedence and associativity

**Visual Studio .NET 2003**

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 |
x.y f(x) a[x] x++ x-- new typeof checked unchecked |

Section 7.6 | Unary |
+ - ! ~ ++x --x (T)x |

Section 7.7 | Multiplicative |
* / % |

Section 7.7 | Additive |
+ - |

Section 7.8 | Shift |
<< >> |

Section 7.9 | Relational and type testing |
< > <= >= is as |

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 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`

.