# Operator precedence and associativity - Ishwaranand

## Q) Explain operator presidency and associativity.

### Precedence of an operator:

• In an expression when there are more the one operator is involved, the evaluation of them is done based on its priority.
• In C, every operator has its own priority (importance) this priority is known as the precedence of the operator.
• This operator having more precedence will be evaluated first and the remaining will be evaluated later. Consider the following expression:
a = 5 + 6 * 10 ;
• Here, the operation * will be performed first since it has higher precedence than +, later+operator will do its task and at the last =will be done.
• The priority of each operator in C is given in the following table.

 Operator precedence and associativity ~ Image by ©Ishwaranand

### Associativity of operators

• When an expression contains two or more operators of equal priority the tie between them is settled using the associativity of the operators.
• Associativity can be two types Left to Right or Right to Left.
• Left to Right associativity means that the left operand must be unambiguous. Unambiguous in what sense? It must not be involved in the evaluation of any other sub-expression. Similarly, in cases of Right to left associativity, the right operand must be unambiguous. Let us understand this with an example.
Consider the expression
a = 3 / 2 * 5 ;
• Here there is a tie between operators of the same priority, that is between / and *. This tie is settled using the associativity of / and *. But both enjoy left to Right associativity.
• The figure shows for each operator which operand is unambiguous and which is not.
OperatorLeftRightRemark
/32 or 2 * 5The left operand is unambiguous, Right is not
*3 / 2 or 25The right operand is unambiguous, Left is not
• Since both / and* have L to R associativity and only / has an unambiguous left operand (a necessary condition for L to R associativity) it is performed earlier.
• After that * will be operated.

### Operator Precedence Table

DescriptionOperator Associativity
Function expression( )Left to Right
Array Expression[ ]Left to Right
Structure operator- >Left to Right
Structure operator.Left to Right
Unary minus-Right to Left
Increment / Decrement++   --Right to Left
One's compliment~Right to Left
Negation!Right to Left
Typecast( type )Right to Left
Size in bytessizeofRight to Left
Multiplication*Left to Right
Division/Left to Right
Modulus%Left to Right
Subtraction-Left to Right
Left Shift<<Left to Right
Right Shift>>Left to Right
Less than<Left to Right
Less than or equal to<=Left to Right
Greater than>Left to Right
Greater than or equal to>=Left to Right
Equal to==Left to Right
Not equal to!=Left to Right
Bitwise AND&Left to Right
Bitwise exclusive OR^Left to Right
Bitwise inclusive OR|Left to Right
Logical AND&&Left to Right
Logical OR||Left to Right
Conditional? :Right to Left
Assignment=Right to Left

*=   /=   %=Right to Left

+=  -=  &=Right to Left

^=   |=Right to Left

<<=     >>=Right to Left
Comma,Right to Left