0Pricing
C Academy · Aula

Armadilhas de conversão

Estouro e truncamento.

Armadilhas de conversão é uma aula grátis de C Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Conversões podem causar problemas

Conversões silenciosas são convenientes, mas podem causar estouro, truncamento e surpresas relacionadas ao sinal. Esta lição aborda essas armadilhas.

#include <stdio.h>
int main(void) {
    printf("Beware silent conversions\n");
    return 0;
}

Estouro de inteiros

Atribuir um valor grande demais para o tipo inteiro de destino faz com que ele dê a volta ou perca dados.

#include <stdio.h>
#include <limits.h>
int main(void) {
    int max = INT_MAX;
    printf("INT_MAX = %d\n", max);
    return 0;
}

Truncamento ao reduzir o tipo

Colocar um valor grande em um tipo menor mantém somente os bits menos significativos, corrompendo o número silenciosamente.

#include <stdio.h>
int main(void) {
    int big = 300;
    unsigned char small = (unsigned char)big;
    printf("small = %d\n", small);
    return 0;
}

Mistura de tipos com e sem sinal

Misturar tipos com e sem sinal converte o valor com sinal para sem sinal, transformando números negativos em positivos enormes.

#include <stdio.h>
int main(void) {
    int a = -1;
    unsigned int b = 1;
    if (a > b)
        printf("surprise: -1 > 1 as unsigned\n");
    return 0;
}

Armadilha do contador de loop

Um contador de loop unsigned que fica abaixo de zero dá a volta para um valor enorme, causando um loop infinito. Use contadores com sinal ao fazer uma contagem regressiva.

#include <stdio.h>
int main(void) {
    for (int i = 3; i >= 0; i--)
        printf("%d ", i);
    printf("\n");
    return 0;
}

Perda ao converter float para int

Converter float para int perde a fração. Se o valor exceder o intervalo de int, o resultado será indefinido.

#include <stdio.h>
int main(void) {
    double d = 3.99;
    int n = (int)d;
    printf("n = %d\n", n);
    return 0;
}

Perda de precisão de double para float

Armazenar um double de alta precisão em um float descarta dígitos, o que pode se acumular em cálculos longos.

#include <stdio.h>
int main(void) {
    double d = 1.123456789012345;
    float f = (float)d;
    printf("%.7f\n", f);
    return 0;
}

Surpresas com o sinal de char

Determinar se char tem sinal depende da implementação. Use unsigned char para valores de bytes e evite resultados negativos.

#include <stdio.h>
int main(void) {
    unsigned char b = 200;
    printf("b = %d\n", b);
    return 0;
}

Dividir e depois converter

Fazer uma divisão inteira e depois converter não recupera a fração perdida. Faça a conversão antes da divisão.

#include <stdio.h>
int main(void) {
    int a = 7, b = 2;
    double wrong = (double)(a / b);
    double right = (double)a / b;
    printf("%.1f vs %.1f\n", wrong, right);
    return 0;
}

Comparando tamanhos

Use as constantes de limits.h para entender o intervalo que um tipo pode armazenar antes de presumir que um valor cabe nele.

#include <stdio.h>
#include <limits.h>
int main(void) {
    printf("char range: %d to %d\n", CHAR_MIN, CHAR_MAX);
    return 0;
}

Conversões defensivas

Verifique os intervalos antes de reduzir o tipo, prefira tipos mais amplos quando estiver em dúvida e torne as conversões explícitas para que a intenção fique clara.

#include <stdio.h>
int main(void) {
    long value = 200;
    if (value >= 0 && value <= 255)
        printf("fits in a byte: %ld\n", value);
    return 0;
}

Verificação rápida

Teste sua compreensão das armadilhas de conversão.

Recapitulação: armadilhas das conversões

Você aprendeu os perigos das conversões silenciosas.

  • Reduzir o tipo pode causar estouro ou truncamento
  • Misturar tipos com e sem sinal inverte as comparações
  • Contadores sem sinal dão a volta ao ficar abaixo de zero
  • Faça a conversão antes da divisão para preservar as frações
  • Verifique os intervalos e torne as conversões explícitas

Perguntas Frequentes

A aula “Armadilhas de conversão” é grátis?

Sim — o texto completo de “Armadilhas de conversão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Armadilhas de conversão”?

Estouro e truncamento. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Armadilhas de conversão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conversões implícitas
  2. Conversões explícitas
  3. Conversões entre inteiros e ponto flutuante
  4. Armadilhas de conversão
← Voltar para C Academy