如何调用溢出和下溢异常

时间:2015-12-03 13:01:12

标签: java

这是针对Java的。我理解这些术语以及它们如何超越它所包含的变量存储限制,如果数字为负数则变为正数,反之亦然。

我无法抛出这些异常。

这是方法。

// computes a + band saves result in answer
public void add (int a, int b)   

我尝试添加2,147,483,647 + 1-2,147,483,648 -1

甚至除以它但它没有给我一个例外。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

  

我理解这些术语以及它们如何超越它所包含的变量存储限制,如果数字为负数则变为正数,反之亦然。

是。这就是发生的事情。当您将最大int值(2 31 - 1)加1时,您将得到最小的int值(-2 31 )。您会得到byteshortlong甚至char的类似行为。

如果floatdouble溢出和下溢导致“无限”值。

  

我无法抛出这些异常。

首先,“那些”例外不存在。

其次,当整数或浮点运算溢出或下溢时,不会抛出异常。

算术给出异常的唯一情况是整数除零和余数为零......两者都抛出ArithmeticException

  

但是我的实验室问题“当两个正整数的总和为负时,它会导致抛出溢出异常。写相应的异常类溢出”

它要求您声明一个自定义OverflowException类,并编写您的添加方法,以便在结果溢出时抛出该异常。您必须自己编写溢出检测逻辑。

答案 1 :(得分:0)

这种不寻常的结果是由于数据类型int存储在Java中的方式以及Java如何处理超出存储容量的计算。 回想一下int类型的范围是-2,147,483,648+2,147,483,647,包括在内。您可能会认为加法2,147,483,647 + 1会导致运行时(整数溢出)错误。事实并非如此,因为Java使用一种名为二进制补码的技术来表示整数;
因此大于2,147,483,647的数字“环绕”到负值,而小于-2,147,483,648的数字“环绕”到正值的另一种方式。

2,147,483,647 + 1 = -2,147,483,648-2,147,483,648 - 1 = 2,147,483,647

因此,整数加法永远不会引发运行时异常。在某些情况下,如果整数加法确实抛出溢出和下溢异常,则可能更为可取。否则,逻辑错误可能无法检测到。