Skip to main content

¿Qué es un desbordamiento de enteros?

El desbordamiento de enteros se refiere al fenómeno que ocurre en ciertos tipos de datos de computadora donde sus signos cambian de positivo a negativo, o viceversa, cuando alcanzan los extremos de sus rangos aplicables. En los rangos de computadora, los tipos de datos enteros tienen rangos circulares, y cuando alcanzan un extremo de su rango, se mueven inmediatamente al otro extremo de su rango. Esto también se llama desbordamiento de enteros.

Un entero con signo puede contener un rango de valores de -2 31 a (2 31 ) - 1. Este entero no puede tener un valor de (-2 31 ) - 1; más bien, el siguiente número al que se incrementa está en el otro extremo de su rango: (2 31 - 1). El cambio de negativo a positivo al final de su rango es un ejemplo de desbordamiento de enteros. Del mismo modo, un número entero no puede tener un valor de 2 31 ; este valor cambiaría al otro extremo de su rango y se convertiría en -2 31 .

Este desbordamiento tiene consecuencias significativas durante la programación. Una matriz solo puede tener tantos índices como lo permita el tipo entero, y los índices negativos no cuentan. Si un programador intenta crear una matriz más grande de lo que permite el tipo entero, pueden ocurrir errores significativos de memoria porque el desbordamiento de enteros daría como resultado un índice negativo. Esto es especialmente peligroso en lenguajes que no tienen límites explícitos para la búsqueda de matrices, como C ++.

Cuando se produce un desbordamiento de enteros, pueden producirse tipos relacionados de desbordamiento, como desbordamiento de búfer, desbordamiento de pila y desbordamiento de búfer de pila. En todos estos casos, el desbordamiento de enteros actúa para abrumar las estructuras de memoria con más datos de los que esas estructuras pueden contener. Estos desbordamientos, en programas simples, a menudo no hacen mucho más que causar una lectura no válida o un error de escritura no válido. Sin embargo, la manipulación de este problema por parte de piratas informáticos puede generar errores de memoria que pueden causar problemas más graves.

En la mayoría de los programas simples, el desbordamiento de enteros no es un problema importante. Los límites del tipo entero son lo suficientemente grandes como para que el problema de desbordamiento no entre en juego a menos que se manejen muchos datos a la vez. En algunos casos, el desbordamiento puede mitigarse, como en el caso de los contadores incrementales, mediante el uso de un tipo de datos más grande con un rango mayor. El tipo de datos más grande podría, en teoría, eventualmente encontrar el mismo problema de desbordamiento, pero a medida que los rangos de tipos de datos se hacen más grandes, las posibilidades de hacerlo se vuelven más pequeñas. El rango de cada tipo de datos enteros es al menos dos veces el tamaño del siguiente más pequeño, por lo que hay un amplio espacio para datos adicionales.