0Pricing
C Academy · Lección

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

  1. Conversiones implícitas
  2. Conversiones explícitas
  3. Conversiones entre enteros y flotantes
  4. Errores en conversiones
← Volver a C Academy