Integer.Max_值上的Java Math.min()错误
此代码应返回两个数字中较小的一个,返回一个与较大数字类似的负数:Integer.Max_值上的Java Math.min()错误,java,Java,此代码应返回两个数字中较小的一个,返回一个与较大数字类似的负数: Math.min(1521474836477)-->返回-2147483642 我怀疑这与int的范围有关,因此我将值更改为long,程序运行良好 我不太明白它返回的看似随机的数字-为什么是-2147483643,而不是我输入的实际数字,-21474836477?差异是由溢出量引起的,还是受到Math.min的其他参数的影响 Math.min(15, 21474836477) 不可能回来 -2147483642 代码本身不会
Math.min(1521474836477)-->返回-2147483642
我怀疑这与int的
范围有关,因此我将值更改为long
,程序运行良好
我不太明白它返回的看似随机的数字-为什么是-2147483643
,而不是我输入的实际数字,-21474836477
?差异是由溢出量引起的,还是受到Math.min的其他参数的影响
Math.min(15, 21474836477)
不可能回来
-2147483642
代码本身不会编译,因为整数文本21474836477
在int
之外
你有可能跑了
Math.min(15L, 21474836477L)
在这种情况下,您将运行重载的
Math.min(long,long)
方法。Math.min被重载,如下所示
静态双分钟(双a,双b)
返回两个双精度值中的较小值。
静态浮动最小值(浮动a、浮动b)
返回两个浮点值中的较小值。
静态最小整数(整数a、整数b)
返回两个int值中的较小值。
静态长最小值(长a、长b)
返回两个长值中的较小值
因此,您甚至可以将其用于长值
long x = 98759765l;
long y = 15428764l;
// print the smaller number between x and y
System.out.println("Math.min(" + x + "," + y + ")=" + Math.min(x, y));
但是,您的长距离也超出范围所述结果,-2147483642是5-Integer.MAX_值,也是7+Integer.MAX_值。我怀疑Math.min参数实际上就是这个值,可能是对其中一个表达式求值的结果。非常消极,肯定少于15 该计划:
public class Test {
public static void main(String[] args) {
System.out.println(Math.min(15, Integer.MAX_VALUE));
System.out.println(Math.min(15, 7+Integer.MAX_VALUE));
System.out.println(Math.min(15, 5-Integer.MAX_VALUE));
}
}
产出:
15
-2147483642
-2147483642
请阅读整数并检查最大整数为:2147483647。看。也请阅读溢出。你的问题可能与你的问题重复。看看答案。也请阅读。请发布一个。我无法复制您的结果。在调用
Math.min
之前,您使用的变量发生了什么变化?