在 Java 中处理整数上溢和下溢

本文介绍整数数据类型的上溢和下溢以及该问题的处理。


Java 中整数上溢和下溢概述

如果您使用整数值,则可能会遇到上溢或下溢错误。 当我们错误地声明变量时,就会发生这种情况,例如分配的值超出了声明的数据类型的范围。

众所周知,整数数据类型有四个级别,包含不同的大小,如下所示:

数据类型 大小
byte 8-bits
short 16-bits
int 32-bits
long 64-bits

如果我们考虑 Java 中的 int,它有一个我们可以分配的值范围。 我们已经知道,int 数据类型的大小是 32 位; 因此,int 可接受的值范围在 -21474836482147483647 之间。

可以使用 Integer.MAX_VALUEInteger.MIN_VALUE 快速获取最大值和最小值。


Java 中的整数溢出

在这里,我们将看到整数溢出的发生及其处理。

发生整数溢出

示例代码:

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);
       }
    }
}

现在,当您执行上述程序时,控制台将显示以下输出:

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)

处理整数溢出

我们需要增加值范围来解决上面的示例。 在我们的例子中,我们将整数类型转换为 long。 我们对上述示例的更新代码如下。

示例代码:

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);
       }
    }
}

现在您将在控制台中看到以下输出。

2147483646
2147483647
2147483648
2147483649

Java 中的整数下溢

在本节中,我们将了解 Java 中的整数下溢以及如何处理它。

发生整数下溢

示例代码:

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

现在,当您执行上述程序时,控制台将显示以下输出:

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

处理整数下溢

为了解决上述错误,我们需要再次增加值的范围,为此,我们可以将整数值类型转换到下一个级别。 看看下面分享的代码。

示例代码:

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

现在您将在控制台中看到以下输出。

-2147483639

因此,我们需要增加数据类型的范围来解决上溢或下溢问题。

你可能感兴趣的:(Java,java,开发语言)