Java 中的溢出和下溢

2024年9月10日 | 阅读 6 分钟

在 Java 中,溢出可以定义为一种情况,当对数值数据类型执行的算术运算产生的结果超过该特定数据类型的范围时。Java 支持各种数值数据类型,包括整数(byte、short、int、long)和浮点数(float、double)。

而 Java 中的下溢可以定义为一种情况,当对数值数据类型执行的算术运算产生的结果小于该数据类型的最小值时。

让我们在接下来的几行中详细了解溢出和下溢。

Java 中的溢出

如前所述,Java 中的溢出可以定义为一种情况,当对数值数据类型执行的算术运算产生的结果超过该特定数据类型的范围时。让我们详细了解一下溢出。

1. 整数溢出

Java 使用固定数量的位来表示整数数据类型的值。例如,Java 使用 32 位来表示一个int变量。而 Java 中有符号整数的表示范围可以定义为从Integer.MIN_VALUEInteger.MAX_VALUE

当算术运算产生的结果大小超过可表示的最大值 (Integer.MAX_VALUE) 时,Java 中就会发生整数溢出

文件名:IntegerOverFlowExample.java

输出

MAXIMUM VALUED INTEGER: 2147483647
OVERFLOW INTEGER Value: -2147483648

2. Long 溢出

就像整型变量一样,long 变量在 Java 中也有一个表示范围,介于Long.MIN_VALUELong.MAX_VALUE之间。

与整数溢出类似,当 long 变量的算术运算产生的结果大小超过可表示的最大值 (Long.MAX_VALUE) 时,或者小于可表示的最小值 (Long.MIN_VALUE) 时,Java 中就会发生Long 溢出

文件名:LongOverflowExample.java

输出

Long Overflow in Java
Input the value to be added to Long variable:
12321321
Long Overflow occurred! Result cannot be Displayed.

3. 浮点溢出

就像整型变量一样,浮点变量在 Java 中也有一个表示范围,介于Float.MIN_VALUEFloat.MAX_VALUE之间。

与整数溢出类似,当浮点变量的算术运算产生的结果大小超过可表示的最大值 (Float.MAX_VALUE) 时,或者小于可表示的最小值 (Float.MIN_VALUE) 时,Java 中就会发生Float 溢出

文件名:FloatOverflowExample.java

输出

Demonstration of Floating-point Overflow in Java
Input a float value to multiply the maximum float value: 1.2651651651
Maximum Float Value: 3.4028235E38
Overflowed Float Value: Infinity

Java 中的下溢

在 Java 中,下溢可以定义为一种场景,其中对数值数据类型执行的算术运算产生的结果小于该数据类型的最小值。让我们了解一下 Java 中下溢的类型。

1. 整数下溢

如前所述,Java 使用固定数量的位来表示整数数据类型的值。例如,Java 使用 32 位来表示一个int变量。而 Java 中有符号整数的表示范围可以定义为从Integer.MIN_VALUEInteger.MAX_VALUE

当算术运算产生的结果大小小于可表示的最小值 (Integer.MIN_VALUE) 时,Java 中就会发生整数下溢

文件名:IntegerUnderflowExapmle.java

输出

Minimum Integer Value: -2147483648
Underflowed Integer Value: 2147483647
Explanation: In 2's complement representation, integer underflow wraps around.

2. Long 下溢

当 long 算术运算产生的结果大小小于可表示的最小值 (Long.MIN_VALUE) 时,Java 中就会发生Long 下溢

文件名:LongUnderFlowExample.java

输出

Minimum Long Value: -9223372036854775808
Underflowed Long Value: 9223372036854775807
Explanation: In 2's complement representation, long underflow wraps around.

3. 浮点下溢

就像整型变量一样,浮点变量在 Java 中也有一个表示范围,介于Float.MIN_VALUEFloat.MAX_VALUE之间。

与整数下溢类似,当浮点变量的算术运算产生的结果大小小于可表示的最小值 (Float.MIN_VALUE) 时,Java 中就会发生Float 下溢

文件名:FloatingPointUnderflow.java

输出

Input a float value to divide the minimum float: 1.5265
Minimum Floating-point Value: 1.17549435E-38
Underflowed Value: 7.700585E-39

下一主题Java 中的填充