Ordem de precedência dos operadores

Em C, assim como em muitas outras linguagens de programação, a ordem de avaliação dos operadores matemáticos segue a convenção padrão da matemática. Aqui está a ordem de precedência dos operadores matemáticos em C, da mais alta para a mais baixa:

  1. Parênteses: Expressões dentro de parênteses são avaliadas primeiro.

  2. Multiplicação (*) e Divisão (/): Multiplicação e divisão têm a mesma prioridade e são avaliadas da esquerda para a direita.

  3. Adição (+) e subtracção (-): Adição e subtracção têm a mesma prioridade e são avaliadas da esquerda para a direita.

Quando há operadores com a mesma precedência, a avaliação ocorre da esquerda para a direita.

Dicas para usar operadores relacionais:

  • Utilize os operadores relacionais para comparar valores e tomar decisões em seu programa.

  • Lembre-se da precedência dos operadores para evitar erros de lógica.

  • Utilize parênteses para alterar a ordem de execução das operações, se necessário.

É sempre importante lembrar da precedência dos operadores, que define a ordem em que as operações são realizadas em uma expressão.


Tabela de Precedência (Principais Operadores)

Precedência (Alta → Baixa)
Operadores
Associatividade

1

() (parênteses), [], ->, .

Esquerda para direita

2

!, ~, ++ (prefixo), -- (prefixo), + (unário), - (unário), & (endereço), * (desreferência), sizeof, (type) (cast)

Direita para esquerda

3

*, /, %

Esquerda para direita

4

+, -

Esquerda para direita

5

<, <=, >, >=

Esquerda para direita

6

==, !=

Esquerda para direita

7

& (bitwise AND)

Esquerda para direita

8

^ (bitwise XOR)

Esquerda para direita

9

`

` (bitwise OR)

10

&& (logical AND)

Esquerda para direita

11

?: (operador condicional ternário)

Direita para esquerda

12

=, +=, -=, *=, /=, %=, &=, `

=, ^=, <<=, >>=` (atribuições)

13

, (vírgula)

Esquerda para direita


Exemplo que demonstra a precedência de operadores :

Exemplo de Código

#include <stdio.h>

int main()
{
    int a = 10, b = 5, c = 2, result;

    result = a + b * c; 
    // Multiplicação (*) tem precedência sobre adição (+)
    printf("Resultado 1: %d\n", result);

    result = (a + b) * c; // Parênteses alteram a precedência
    printf("Resultado 2: %d\n", result);
    
    result = a > b && b > c; 
    // Operadores relacionais têm precedência sobre operadores lógicos
    printf("Resultado 3: %d\n", result);

    return 0;
}

Saída

Resultado 1: 20
Resultado 2: 30
Resultado 3: 1

Atualizado