VOOZH about

URL: https://www.geeksforgeeks.org/c/operator-precedence-and-associativity-in-c/

⇱ Operator Precedence and Associativity in C - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Operator Precedence and Associativity in C

Last Updated : 1 Nov, 2025

In C, expressions often contain multiple operators, and the order of evaluation affects the result. Operator precedence and associativity are rules that decide which operator is applied first and in which direction operators of the same precedence are evaluated.


Output
12

Explanation: The above expression is evaluated as 6 + ( (3 * 4) / 2) = 12, not (6 + 3) * (4 / 2) = 18. So what guided the compiler to evaluate the expression in this way? It is actually the precedence and associativity of the operators used in this expression.

Operator Precedence

  • Operator precedence decides which operation is performed first in an expression with multiple operators.
  • In the expression 10 + 20 * 30, the * (multiplication) operator has higher precedence than + (addition).
  • Therefore, multiplication is evaluated first, followed by addition to get the final result.

👁 operator precedence


Output
610

As we can see, the expression is evaluated as,10 + (20 * 30) but not as (10 + 20) * 30 due to * operator having higher precedence.

Operator Associativity

  • Operator associativity decides the order of evaluation when two operators of the same precedence appear in an expression.
  • Associativity can be left-to-right or right-to-left depending on the operator.
  • In the expression 100 / 5 % 2, both / (division) and % (modulus) have the same precedence.
  • Since they have left-to-right associativity, division is performed first, followed by modulus to get the final result.
👁 operator associativity

Output
0

Operators Precedence and Associativity are two characteristics of operators that determine the evaluation order of sub-expressions.

Example of Operator Precedence and Associativity

  • Operator precedence and associativity work together to determine the order of evaluation in expressions.
  • In exp = 100 + 200 / 10 - 3 * 10, division (/) and multiplication (*) are evaluated before addition (+) and subtraction (-).
  • Due to left-to-right associativity, division is done first, then multiplication, followed by addition and subtraction to get the final result.

👁 operator precedence and associativity


Output
90

Operator Precedence and Associativity Table

The following tables list the C operator precedence from highest to lowest and the associativity for each of the operators:

   Precedence   

 Operator   

Description

   Associativity   

1

()

Parentheses (function call)

Left-to-Right

[]

Array Subscript (Square Brackets)

.

Dot Operator

->

Structure Pointer Operator

++ , --

Postfix increment, decrement

2

++ / --

Prefix increment, decrement

Right-to-Left

+ / -

Unary plus, minus

! , ~

Logical NOT,  Bitwise complement

(type)

Cast Operator

*

Dereference Operator

&

Addressof Operator

sizeof

Determine size in bytes

3

*,/,%

Multiplication, division, modulus

Left-to-Right

4

+/-

Addition, subtraction

Left-to-Right

5

<< , >>

Bitwise shift left, Bitwise shift right

Left-to-Right

6

< , <=

Relational less than, less than or equal to

Left-to-Right

> , >=

Relational greater than, greater than or equal to

7

== , !=

Relational is equal to, is not equal to

Left-to-Right

8

&

Bitwise AND

Left-to-Right

9

^

Bitwise exclusive OR

Left-to-Right

10

|

Bitwise inclusive OR

Left-to-Right

11

&&

Logical AND

Left-to-Right

12

||

Logical OR

Left-to-Right

13

?:

Ternary conditional

Right-to-Left

14

=

Assignment

Right-to-Left

+= , -=

Addition, subtraction assignment

*= , /=

Multiplication, division assignment

%= , &=

Modulus, bitwise AND assignment

^= , |=

Bitwise exclusive, inclusive OR assignment

<<=, >>=

Bitwise shift left, right assignment

15

,

comma (expression separator)

Left-to-Right

Easy Trick to Remember the Operators Associtivity and Precedence: PUMA'S REBL TAC

where, P = Postfix, U = Unary, M = Multiplicative, A = Additive, S = Shift, R = Relational, E = Equality, B = Bitwise, L = Logical, T = Ternary, A = Assignment and C = Comma

Important Points

There are a few important points and cases that we need to remember for operator associativity and precedence which are as follows:

Associativity is only used when there are two or more operators of the same precedence.

The point to note is associativity doesn't define the order in which operands of a single operator are evaluated. For example, consider the following program, associativity of the + operator is left to right, but it doesn't mean f1() is always called before f2(). The output of the following program is in-fact compiler-dependent.


Output
10 

You can check this article for more details.

We can use parenthesis to change the order of evaluation

Parenthesis ( ) got the highest priority among all the C operators. So, if we want to change the order of evaluation in an expression, we can enclose that particular operator in ( ) parenthesis along with its operands.

Consider the given expression

100 + 200 / 10 - 3 * 10

= 90

But if we enclose 100 + 200 in parenthesis, then the result will be different.

(100 + 200) / 10 - 3 * 10

= 0

As the + operator will be evaluated before / operator.

All operators with the same precedence have the same associativity.

This is necessary, otherwise, there won't be any way for the compiler to decide the evaluation order of expressions that have two operators of the same precedence and different associativity. For example + and - have the same associativity.

Precedence and associativity of postfix ++ and prefix ++ are different.

The precedence of postfix ++ is more than prefix ++, their associativity is also different. The associativity of postfix ++ is left to right and the associativity of prefix ++ is right to left. Check this article for more details.

Comma has the least precedence among all operators and should be used carefully.


Output
1

There is no chaining of comparison operators in C

In Python, an expression like "c > b > a" is treated as "c > b and b > a", but this type of chaining doesn't happen in C. For example, consider the following program. The output of the following program is "FALSE".


Output
FALSE
Comment
Article Tags: