C operators precedence and its associativity

Precedence of operators

If more than one operators are involved in an expression, C language has a predefined rule of priority for the operators. This rule of priority of operators is called operator precedence.

In C, precedence of arithmetic operators( *, %, /, +, -) is higher than relational operators(==, !=, >, <, >=, <=) and precedence of relational operator is higher than logical operators(&&, || and !).

Example of precedence

(1 > 2 + 3 && 4)
This expression is equivalent to:
((1 > (2 + 3)) && 4)
i.e, (2 + 3) executes first resulting into 5
then, first part of the expression (1 > 5) executes resulting into 0 (false)
then, (0 && 4) executes resulting into 0 (false)

Output

0

Associativity of operators

If two operators of same precedence (priority) is present in an expression, Associativity of operators indicate the order in which they execute.

Example of associativity

1 == 2 != 3

Here, operators == and != have same precedence. The associativity of both == and != is left to right, i.e, the expression on the left is executed first and moves towards the right.

Thus, the expression above is equivalent to :

((1 == 2) != 3)
i.e, (1 == 2) executes first resulting into 0 (false)
then, (0 != 3) executes resulting into 1 (true)

Output

1

The table below shows all the operators in C with precedence and associativity.

Note: Precedence of operators decreases from top to bottom in the given table.

Summary of C operators with precedence and associativity
Operator Meaning of operator Associativity
()
[]
->
.
Functional call
Array element reference
Indirect member selection
Direct member selection
Left to right
!
~
+

++

&
*
sizeof
(type)
Logical negation
Bitwise(1 ‘s) complement
Unary plus
Unary minus
Increment
Decrement
Dereference Operator(Address)
Pointer reference
Returns the size of an object
Type cast(conversion)
Right to left
*
/
%
Multiply
Divide
Remainder
Left to right
+
Binary plus(Addition)
Binary minus(subtraction)
Left to right
<<
>>
Left shift
Right shift
Left to right
<
<=
>
>=
Less than
Less than or equal
Greater than
Greater than or equal
Left to right
==
!=
Equal to
Not equal to
Left to right
& Bitwise AND Left to right
^ Bitwise exclusive OR Left to right
| Bitwise OR Left to right
&& Logical AND Left to right
|| Logical OR Left to right
?: Conditional Operator Right to left
=
*=
/=
%=
-=
&=
^=
|=
<<=
>>=
Simple assignment
Assign product
Assign quotient
Assign remainder
Assign sum
Assign difference
Assign bitwise AND
Assign bitwise XOR
Assign bitwise OR
Assign left shift
Assign right shift
Right to left
, Separator of expressions Left to right