Errores en conversiones
Desbordamiento y truncamiento
Errores en conversiones es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Las conversiones pueden causar problemas
Las conversiones silenciosas son prácticas, pero pueden provocar desbordamientos, truncamientos y resultados inesperados con los signos. En esta lección se explican estas trampas.
#include <stdio.h>
int main(void) {
printf("Beware silent conversions\n");
return 0;
}Desbordamiento de enteros
Asignar un valor demasiado grande para el tipo entero de destino hace que dé la vuelta o que se pierdan datos.
#include <stdio.h>
#include <limits.h>
int main(void) {
int max = INT_MAX;
printf("INT_MAX = %d\n", max);
return 0;
}Truncamiento por reducción de tipo
Al introducir un valor grande en un tipo más pequeño, solo se conservan los bits menos significativos y el número se corrompe silenciosamente.
#include <stdio.h>
int main(void) {
int big = 300;
unsigned char small = (unsigned char)big;
printf("small = %d\n", small);
return 0;
}Mezcla de tipos con y sin signo
Mezclar tipos con y sin signo convierte el valor con signo a unsigned, transformando los negativos en 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;
}La trampa del contador de bucle
Un contador de bucle unsigned que baja de cero da la vuelta hasta un valor enorme y provoca un bucle infinito. Use contadores con signo al contar hacia atrás.
#include <stdio.h>
int main(void) {
for (int i = 3; i >= 0; i--)
printf("%d ", i);
printf("\n");
return 0;
}Pérdida al convertir de float a int
Convertir un float a int elimina la fracción. Si el valor supera el rango de int, el resultado no está definido.
#include <stdio.h>
int main(void) {
double d = 3.99;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}Pérdida de precisión de double a float
Al almacenar un double de alta precisión en un float se pierden dígitos, lo que puede acumular errores en cálculos largos.
#include <stdio.h>
int main(void) {
double d = 1.123456789012345;
float f = (float)d;
printf("%.7f\n", f);
return 0;
}Sorpresas con el signo de char
Que char tenga signo depende de la implementación. Use unsigned char para valores de bytes y evite resultados negativos.
#include <stdio.h>
int main(void) {
unsigned char b = 200;
printf("b = %d\n", b);
return 0;
}Dividir y convertir después
Realizar una división entera y hacer el cast después no puede recuperar la fracción perdida. Haga el cast antes de dividir.
#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;
}Comparación de rangos
Use las constantes de limits.h para conocer el rango que puede contener un tipo antes de dar por hecho que un valor cabe en él.
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("char range: %d to %d\n", CHAR_MIN, CHAR_MAX);
return 0;
}Conversiones defensivas
Compruebe los rangos antes de reducir el tipo, prefiera tipos más amplios cuando tenga dudas y haga explícitos los casts para que la intención quede 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;
}Comprobación rápida
Compruebe sus conocimientos sobre las dificultades de las conversiones.
Repaso: dificultades de las conversiones
Ha aprendido los peligros de las conversiones silenciosas.
- La reducción de tipo puede provocar desbordamientos o truncamientos
- Mezclar tipos con y sin signo invierte las comparaciones
- Los contadores unsigned dan la vuelta al bajar de cero
- Haga el cast antes de dividir para conservar las fracciones
- Compruebe los rangos y haga explícitos los casts
Preguntas frecuentes
¿La lección «Errores en conversiones» es gratis?
Sí — el texto completo de «Errores en conversiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Errores en conversiones»?
Desbordamiento y truncamiento Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Errores en conversiones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conversiones implícitas
- Conversiones explícitas
- Conversiones entre enteros y flotantes
- Errores en conversiones