Manejar desbordamiento y subdesbordamiento de enteros en Java

MD Aminul Islam 12 octubre 2023
  1. Descripción general del desbordamiento y subdesbordamiento de enteros en Java
  2. Desbordamiento de enteros en Java
  3. Subdesbordamiento de enteros en Java
Manejar desbordamiento y subdesbordamiento de enteros en Java

Este artículo describe el desbordamiento y subdesbordamiento de un tipo de datos entero y el manejo de este problema.

Descripción general del desbordamiento y subdesbordamiento de enteros en Java

Puede enfrentar un error de desbordamiento o subdesbordamiento si trabaja con valores enteros. Ocurre cuando declaramos una variable incorrectamente, como asignar un valor que está fuera de rango para el tipo de datos declarado.

Como sabemos, hay cuatro niveles de tipos de datos enteros que contienen diferentes tamaños que se detallan a continuación:

Tipo de datos Tamaño
byte 8 bits
short 16 bits
int 32 bits
long 64 bits

Si consideramos el int en Java, tiene un rango de valores que podemos asignar. Como ya sabemos, ese tipo de datos int tiene un tamaño de 32-bits; entonces, el rango de valores aceptados en int está entre -2147483648 a 2147483647.

Puede obtener rápidamente el valor máximo y mínimo utilizando Integer.MAX_VALUE e Integer.MIN_VALUE.

Desbordamiento de enteros en Java

Aquí, veremos la ocurrencia del desbordamiento de enteros y su manejo.

Ocurrencia de desbordamiento de enteros

Código de ejemplo:

public class IntegerOverflow {
  public static void main(String[] args) {
    int Intvalue = Integer.MAX_VALUE - 1;
    for (int i = 0; i < 4; i++) {
      System.out.println(Intvalue);
      Intvalue = Math.addExact(Intvalue, 1);
    }
  }
}

Ahora, cuando ejecute el programa anterior, la consola le mostrará el siguiente resultado:

2147483646
2147483647
Exception in thread "main" java.lang.ArithmeticException: integer overflow
    at java.base/java.lang.Math.addExact(Math.java:828)at IntegerOverflow.main(IntegerOverflow.java:9)

Manejar el desbordamiento de enteros

Necesitamos aumentar el rango de valores para resolver nuestro ejemplo anterior. En nuestro caso, encasillamos el entero a largo. Nuestro código actualizado para el ejemplo anterior será el siguiente.

Código de ejemplo:

public class IntegerOverflow {
  public static void main(String[] args) {
    int Intvalue = Integer.MAX_VALUE - 1;
    long NewValue = (long) Intvalue; // Upgrading to new type
    for (int i = 0; i < 4; i++) {
      System.out.println(NewValue);
      NewValue = Math.addExact(NewValue, 1);
    }
  }
}

Ahora verá el siguiente resultado en su consola.

2147483646
2147483647
2147483648
2147483649

Subdesbordamiento de enteros en Java

En esta sección, aprenderemos sobre el subdesbordamiento de enteros en Java y cómo podemos manejarlo.

Ocurrencia de subdesbordamiento de enteros

Código de ejemplo:

public class IntegerUnderflow {
  public static void main(String[] args) {
    int value = -2147483699; // Creating underflow intentionally
    System.out.println(value - 1);
  }
}

Ahora, cuando ejecute el programa anterior, la consola le mostrará el siguiente resultado:

/IntegerUnderflow.java:3: error: integer number too large
    int value = -2147483699; // Creating underflow intentionally
                 ^
1 error

Manejar subdesbordamiento de enteros

Para resolver el error anterior, necesitamos aumentar el rango del valor nuevamente y, para hacerlo, podemos encasillar el valor entero al siguiente nivel. Eche un vistazo al código compartido a continuación.

Código de ejemplo:

public class IntegerUnderflow {
  public static void main(String[] args) {
    long value = (long) -2147483638; // Type Casting
    System.out.println(value - 1);
  }
}

Ahora verá el siguiente resultado en su consola.

-2147483639

Por lo tanto, necesitamos aumentar el rango del tipo de datos en caso de resolver los problemas de desbordamiento o subdesbordamiento.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Artículo relacionado - Java Error

Artículo relacionado - Java Integer