在 Java 中处理整数上溢和下溢
本文介绍整数数据类型的上溢和下溢以及该问题的处理。
Java 中整数上溢和下溢概述
如果您使用整数值,则可能会遇到上溢或下溢错误。 当我们错误地声明变量时,就会发生这种情况,例如分配的值超出了声明的数据类型的范围。
众所周知,整数数据类型有四个级别,包含不同的大小,如下所示:
数据类型 | 大小 |
---|---|
byte | 8-bits |
short | 16-bits |
int | 32-bits |
long | 64-bits |
如果我们考虑 Java 中的 int,它有一个我们可以分配的值范围。 我们已经知道,int 数据类型的大小是 32 位; 因此,int 可接受的值范围在 -2147483648 到 2147483647 之间。
可以使用 Integer.MAX_VALUE
和 Integer.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
因此,我们需要增加数据类型的范围来解决上溢或下溢问题。
相关文章
C# 中的 Java final 等效关键字
发布时间:2024/02/01 浏览次数:73 分类:编程语言
-
C# 中有两个不同的关键字,它们等效于 Java 中的 final 关键字,用于类和函数的 sealed 关键字以及用于字段的 readonly 关键字。本教程将讨论与 Java 中的 final 关键字等效的 C# 关键字。Java final 关键
Java 到 Python 的转换器
发布时间:2023/12/20 浏览次数:205 分类:Python
-
本教程讨论如何将 Java 代码转换为 Python 代码。使用外部工具将代码从 Java 转换为 Python
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。