0

我正在创建一个反向波兰计算器并且遇到了饱和问题。我已经实现了一个堆栈,并且发现在没有问题的情况下我可以达到的最大数字是 2147483647。所以如果我将此数字推入堆栈,然后加 1,我得到的结果是 -214748364 8(负数)。我需要做的不是返回这个负数,而是返回原始数字2147483647。基本上以这个为限制。这同样适用于事物的消极方面,限制为 -2147483648。如果我错过了任何信息或者您需要查看代码,请告诉我。

4

1 回答 1

0

最大值int2147483647,最小值为-2147483648int值环绕,所以当你1加到2147483647你得到时,当你从你得到-2147483648时减去。1-21474836482147483647

如果你不想要这种行为,你可以做

int a = 2147483647;
a += 1.0;                   // a is still 2147483647

或者

int a = 2147483647;
int b = (int) (a + 1.0);    // b is also 2147483647

这些工作是因为a + 1.0是使用double(无溢出)计算的,并且结果被转换回int使用大于Integer.MAX_VALUE仅变为的数字的规则Integer.MAX_VALUE

于 2015-11-26T17:19:10.160 回答