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
- Conversões implícitas
- Conversões explícitas
- Conversões entre inteiros e ponto flutuante
- Armadilhas de conversão