Operator precedence and associativity - Ishwaranand

 Follow Your Dream | Believe in YourSelf | & Don't Give Up

News

Operator precedence and associativity

Operator precedence and associativity

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 meaning, operator precedence javascript, operator precedence table, operator precedence java, operator precedence in c, operator precedence in c with example, operator precedence in python, operator precedence c,
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
Address of&Right to Left
Value of address*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
Addition+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