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