¿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 denomina desbordamiento de enteros.

Un entero con signo puede contener un rango de valores de -231 a (231) – 1. Este entero no puede tener un valor de (-231) – 1; más bien, el siguiente número al que incrementa está en el otro extremo de su rango: (231 – 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 231; en cambio, este valor cambiaría al otro extremo de su rango y se convertiría en -231.

Este desbordamiento tiene consecuencias importantes 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 de entero, pueden ocurrir errores de memoria significativos 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 verificar matrices, como C ++.

Cuando se produce un desbordamiento de enteros, pueden producirse tipos relacionados de desbordamiento, como desbordamiento del búfer, desbordamiento del montón y desbordamiento del 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, no suelen hacer mucho más que provocar una lectura o un error de escritura no válidos. Sin embargo, la manipulación de este problema por parte de los 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 de 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 se puede mitigar, como en el caso de los contadores en aumento, 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 reducen. El rango de cada tipo de datos enteros es al menos el doble del tamaño del siguiente más pequeño, por lo que hay un amplio espacio para datos adicionales.