为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查Java中的两个数字是否会引起溢出?

如何检查Java中的两个数字是否会引起溢出?

莫回无 2019-11-12 10:57:07
我想处理将两个数字相乘会导致溢出的特殊情况。代码看起来像这样:int a = 20;long b = 30;// if a or b are big enough, this result will silently overflowlong c = a * b;那是一个简化的版本。在实际程序中,a并且b在运行时从其他地方获取。我想要实现的是这样的:long c;if (a * b will overflow) {    c = Long.MAX_VALUE;} else {    c = a * b;}您如何建议我最好编写此代码?更新:a和b总是非负在我的情况。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

Java的8有Math.multiplyExactMath.addExact等,为整数且长。这些会引发未经检查ArithmeticException的溢出。


查看完整回答
反对 回复 2019-11-12
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您可以改用java.math.BigInteger并检查结果的大小(尚未测试代码):


BigInteger bigC = BigInteger.valueOf(a) * multiply(BigInteger.valueOf(b));

if(bigC.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {

  c = Long.MAX_VALUE;

} else {

  c = bigC.longValue()

}


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 772 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信