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