Publicidade

Operadores Aritméticos

Um guia visual dos operadores aritméticos de C (+, -, *, /, %), conversão implícita de tipo e casts.

📖 O que você vai aprender nesta página
✅ Essencial
  • + - * / para aritmética, % para resto
  • int / int trunca (sem decimais)
  • *// têm maior precedência que +/-
  • Use ( ) para mudar a ordem de precedência
⭐ Leia se tiver tempo
  • Tabela completa de precedência de operadores
  • Promoção de tipo com mistura de int/double
  • Comportamento de overflow

Operadores Aritméticos

Soma
a + b
Subtração
a - b
Multiplicação
a * b
Divisão
a / b
Resto (Módulo)
a % b
Atenção: int / int trunca. 7/23, não 3.5.

Calculadora de Operadores

resultado int
resultado double

Conversão de Tipo e Casts

Quando você mistura tipos diferentes em uma expressão, C faz uma conversão de tipo. Algumas conversões acontecem automaticamente; outras você precisa escrever de forma explícita.

Conversão Implícita (Automática)

Quando uma expressão mistura int e double, o int é automaticamente promovido a double. Isso é conversão implícita.
int a = 7;
double b = 2.0;
double result = a / b;  // a é promovido automaticamente para double → 7.0 / 2.0 = 3.5
int / int
→ int
7 / 2 = 3 (truncado)
int / double
→ double
7 / 2.0 = 3.5
double / int
→ double
7.0 / 2 = 3.5
Regra: se qualquer lado for double, o resultado é double. Só quando os dois lados são int é que você tem divisão inteira (truncada).

Cast Explícito (Manual)

Escrever (tipo destino) antes de uma expressão a converte temporariamente para esse tipo. Isso se chama cast.
Mesmo com int / int, fazer cast de um lado já te dá um resultado em ponto flutuante.
int a = 7, b = 2;

// Sem cast → divisão inteira
printf("%d\n", a / b);           // 3 (truncado)

// Com cast → ponto flutuante
printf("%f\n", (double)a / b);   // 3.500000
Sintaxe do cast: (tipo) expressão
int → double
int x = 5;
double d = (double)x;  // 5.0
double → int
double d = 3.7;
int n = (int)d;       // 3 (parte fracionária truncada)
Calculando uma média (caso típico)
int sum = 17, n = 3;
double avg = (double)sum / n; // 5.666...
Erro comum: (double)(sum / n) faz primeiro a divisão inteira (sum / n = 5) e só depois converte o 5 para 5.0.
O cast precisa acontecer antes da divisão.

Experimente com Cast

Teste alguns valores e compare o resultado com e sem cast.
a / b (int / int)
a parte fracionária se perde
(double)a / b (com cast)
resultado exato

Situações Comuns em que um Cast é Necessário

SituaçãoCódigoPor quê
Divisão inteira, mas você quer resultado em ponto flutuante(double)a / bForçar um lado a ser double para ter divisão em ponto flutuante
Calculando uma média(double)sum / countEvitar a truncagem do int / int
Valor de retorno do malloc(int *)malloc(...)Converter void* para o tipo de ponteiro adequado
Truncar um float em direção ao zero(int)3.73Descartar a parte fracionária
Tratar um char como número(int)'A'65Obter o código ASCII

Teste Rápido

int a = 10, b = 3;
printf("A: %d\n", a / b);
printf("B: %f\n", (double)a / b);
printf("C: %f\n", (double)(a / b));

O que A, B e C imprimem?

A: 3, B: 3.333333, C: 3.333333
A: 3, B: 3.333333, C: 3.000000
A: 3.333333, B: 3.333333, C: 3.000000
A: 3, B: 3.000000, C: 3.333333
Explicação:
A: int / int = int → 10/3 = 3 (truncado).
B: (double)a / b → 10.0 / 3 = 3.333333 (o cast acontece antes da divisão, então é em ponto flutuante).
C: (double)(a / b) → (double)(3) = 3.000000 (a divisão inteira acontece primeiro — a posição do cast faz diferença!)

Experimente os Operadores

operators.c
Saída
Clique em "Executar" para rodar...
💡 Algumas coisas para tentar
Publicidade

Aulas Relacionadas

Operadores
Atribuição e Incremento
Operadores de atribuição em C e incremento (++) / decremento (--).
Operadores
Operadores de Comparação e Lógicos
Operadores de comparação de C (==, !=, <, >) e operadores lógicos (&&, ||, !).
Operadores
Teste de Aritmética
Teste para verificar seu entendimento dos operadores aritméticos de C.
← Aula anterior
Aula 7: Teste (scanf)
Próxima aula →
Aula 9: Teste (Aritmética)

Teste seu entendimento

Teste seu entendimento desta aula!

Q1. Quanto é 7 / 2? (ambos operandos são int)

3.5
3
4

int / int descarta a parte fracionária, então 7 / 2 = 3.

Q2. Quanto é 7 % 2?

3
1
3.5

% é o operador de resto (módulo). 7 / 2 é 3 com resto 1, então o resultado é 1.

Q3. Quanto é (double)5 / 2?

2
2.5
2.000000

Fazer cast para (double) força divisão em ponto flutuante: 5.0 / 2 = 2.5.

Compartilhe este artigo
Compartilhar no X (Twitter) Compartilhar no Facebook Compartilhar no LinkedIn