当前位置: 首页 > 面试题库 >

如何检测32位整数上的整数溢出?

锺离良哲
2023-03-14
问题内容

我知道有人多次问过这个话题,但是 我的问题是关于完整32位int的溢出 。例如:

  11111111111111111111111111111111 +
  00000000000000000000000000000001 =
  00000000000000000000000000000000   //overflow!

我发现话题与这个类似的问题,但该算法是不完美的。

  11111111111111111111111111111111 +
  00000000000000000000000000000000 =
  00000000000000000000000000000000  //overflow!

有没有简单,快速,安全的方法来检查此内容?


问题答案:

从Java
8开始,Math该类中提供了一组方法:

  • toIntExact(long)
  • addExact(int,int)
  • subtractExact(int,int)
  • multiplyExact(int,int)

…以及很长的版本。

ArithmeticException如果发生溢出,这些方法中的每一个都会引发。否则,如果它在该范围内,它们将返回正确的结果。

添加示例:

int x = 2_000_000_000;
int y = 1_000_000_000;
try {
    int result = Math.addExact(x, y);
    System.out.println("The proper result is " + result);
} catch(ArithmeticException e) {
    System.out.println("Sorry, " + e);
}

看到此代码在IdeOne.com上实时运行。

抱歉,java.lang.ArithmeticException:整数溢出



 类似资料:
  • 问题内容: 我在C ++编写一个程序来找到所有的解决方案一b = c ^,其中一个,b和c ^一起使用所有的数字0-9只出现一次。该程序循环了a和b的值,并且每次在a,b和a b上运行一个数字计数例程,以检查是否满足数字条件。 但是,当a b超出整数限制时,可能会生成伪解。我最终使用如下代码检查了这一点: 有没有更好的测试溢出方式?我知道有些芯片具有发生溢出时设置的内部标志,但我从未见过通过C或C

  • 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出。整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代码执行。在这篇文章中,我将仅谈论整数溢出导致堆栈溢出,整数溢出导致堆溢出将在后面的单独的帖子中讨论。 数据类型大小及范围: 当我们试图存储一个大于最大支持值的值时,我们的值会被包装 。例如,当我们尝试将存储到带

  • 我在c编程方面是个新手,我正试图弄清楚更多关于位的知识,二进制E.c.T 例如,我有三个二进制int变量m1=255或11111111;m2=255或11111111(二进制),m3=255或11111111(二进制),m4=0或00000000(二进制)。我试图把所有的主题放在一起到单一的int变量temp。类似于(11111111 11111111 1111111100000000)这里是我的

  • 本文向大家介绍C#整数溢出,包括了C#整数溢出的使用技巧和注意事项,需要的朋友参考一下 示例 整数可以存储的最大容量。而当您超过该限制时,它将循环回到负面。对于int,它是2147483647 对于超出此范围的所有整数,请使用System.Numerics数据类型为BigInteger的名称空间。检查下面的链接以获取更多信息https://msdn.microsoft.com/zh-cn/libr

  • 问题内容: Java如何处理整数下溢和上溢? 由此,您将如何检查/测试这种情况的发生? 问题答案: 如果溢出,它将返回最小值并从那里继续。如果下溢,它将返回最大值并从那里继续。 你可以按如下方式事先检查: (可以替代由执行相同的检查) 如果你认为这种情况可能发生的次数更多,那么请考虑使用可以存储较大值(例如long或)的数据类型或对象。最后一个不会溢出,实际上,可用的JVM内存是限制。 如果你碰巧

  • 在阅读关于这个问题的评论时,我发现了一个指向comp.lang.c常见问题解答的链接,该链接显示了一个“小心加法函数”,据称该函数检测整数溢出: 如果,这如何不溢出?如果假设和都是正数,为什么首先将它们设为而不是?