如何检查一个大于Integer.MAX_VALUE的整数[重复]

问题描述 投票:-2回答:5

假设我有一个正的int x;我想加倍x直到它大于Integer.MAX_VALUE然后停止。

我知道MAX_VALUE = 2 ^ 31-1,如果x超出此值,则发生溢出,x变为负值。

我想知道我是否可以使用条件(x <0)检查x是否超出MAX_VALUE,因为x是一个整数,它永远不会超过MAX_VALUE所以我不能使用(x> Integer.MAX_VALUE)去检查。

java integer max
5个回答
0
投票

使用long代替:

int i = Integer.MAX_VALUE;
long l = (long) i * 2; //cast int to long
System.out.println(l); //prints 4294967294

0
投票

是的,它总是有效,因为最后一次加倍的最大可能结果是(-2 ^ 31 +(2 ^ 31 - 1)),即-1。但是,它依赖于溢出/下溢是不受欢迎的,因为它是内存工作方式的副作用,而不是预期的效果。


0
投票

而是使用像这样的BigIntegerBigInteger i = new BigInteger("Enter number in base 10 here");,然后你甚至不必担心Integer.MAX_VALUE的价值,因为BigIntegers几乎是无限的。


0
投票

如果加倍,任何大于最大值一半的(正)数将溢出,而将任何小于或等于最大值一半的数加倍将导致小于或等于最大值。所以这应该工作:

int sum = startValue;
int halfMax = Integer.MAX_VALUE / 2;
while ( sum <= halfMax ) {
   sum *= 2;
}

循环从给定的数字开始,如果它<=最大值的一半,则总和加倍,一旦总和大于最大值的一半,就退出循环。

© www.soinside.com 2019 - 2024. All rights reserved.