Precedência de operadores em C

A precedência do operador determina o agrupamento de termos em uma expressão e decide como uma expressão é avaliada. Certos operadores têm precedência mais alta do que outros; por exemplo, o operador de multiplicação tem uma precedência mais alta do que o operador de adição.

Por exemplo, x = 7 + 3 * 2; aqui, x é atribuído a 13, não 20, porque o operador * tem uma precedência maior do que +, portanto, primeiro é multiplicado por 3 * 2 e, em seguida, é adicionado a 7.

Aqui, os operadores com a precedência mais alta aparecem na parte superior da tabela, aqueles com a mais baixa aparecem na parte inferior. Em uma expressão, os operadores de precedência mais altos serão avaliados primeiro.

Categoria Operador Associatividade
Postfix () [] ->. ++ - - Da esquerda para direita
Unário + -! ~ ++ - - (tipo) * & sizeof Direita para esquerda
Multiplicativo * /% Da esquerda para direita
Aditivo + - Da esquerda para direita
Mudança << >> Da esquerda para direita
Relacional <<=>> = Da esquerda para direita
Igualdade ==! = Da esquerda para direita
E bit a bit E Da esquerda para direita
XOR bit a bit ^ Da esquerda para direita
OR bit a bit | Da esquerda para direita
E lógico && Da esquerda para direita
OR lógico || Da esquerda para direita
Condicional ?: Direita para esquerda
Tarefa = + = - = * = / =% = >> = << = & = ^ = | = Direita para esquerda
Vírgula , Da esquerda para direita

Exemplo

Tente o seguinte exemplo para entender a precedência do operador em C -

#include <stdio.h>

main() {

   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
 
   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   printf("Value of (a + b) * c / d is : %d\n",  e );

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   printf("Value of ((a + b) * c) / d is  : %d\n" ,  e );

   e = (a + b) * (c / d);   // (30) * (15/5)
   printf("Value of (a + b) * (c / d) is  : %d\n",  e );

   e = a + (b * c) / d;     //  20 + (150/5)
   printf("Value of a + (b * c) / d is  : %d\n" ,  e );
  
   return 0;
}

Quando você compila e executa o programa acima, ele produz o seguinte resultado -

Value of (a + b) * c / d is : 90
Value of ((a + b) * c) / d is  : 90
Value of (a + b) * (c / d) is  : 90
Value of a + (b * c) / d is  : 50