长于Long.MAX_VALUE的长度

时间:2013-05-14 14:35:32

标签: java long-integer

如何获得比Long.MAX_VALUE更长的长号?

我希望此方法返回true

boolean isBiggerThanMaxLong(long val) {
    return (val > Long.MAX_VALUE);
}

5 个答案:

答案 0 :(得分:50)

该方法无法返回true。那是Long.MAX_VALUE。如果它的名字是......假的,那么真的会让人感到困惑。然后它应该被称为Long.SOME_FAIRLY_LARGE_VALUE并且实际上没有合理的用途。只需使用Android's isUserAGoat,或者您可以滚动自己的函数,该函数始终返回false

请注意,内存中的long需要固定的字节数。 From Oracle

  

long:long数据类型是64位带符号的二进制补码整数。它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807(含)。当需要比int提供的值范围更宽的值时,请使用此数据类型。

正如您可能从基本的计算机科学或离散数学中知道的那样,长达2 ^ 64个可能的值,因为它是64位。正如你从离散数学或数论或常识中所知,如果只有有限多种可能性,其中一种必须是最大的。那将是Long.MAX_VALUE。所以你问的是“有一个整数是> 0和< 1?”数学荒谬。

如果你真的需要这个用于真实的东西,那么使用BigInteger类。

答案 1 :(得分:11)

你做不到。如果您有一个名为isBiggerThanMaxLong(long)的方法,则应始终返回false

如果要增加Long.MAX_VALUE的位,则下一个值应为Long.MIN_VALUE。阅读二重补充,这应该告诉你原因。

答案 2 :(得分:3)

首先,下面的方法没有编译,因为它缺少返回类型,应该Long.MAX_VALUE代替Long.Max_value

public static isBiggerThanMaxLong(long l){
      return l>Long.Max_value;
}

上述方法永远无法返回true,因为您要将long值与Long.MAX_VALUE进行比较,请参阅只能在其中传递long的方法签名。任何{{ 1}}可以和long一样大,但不能大于那个。

您可以使用BigInteger类尝试类似的内容:

Long.MAX_VALUE

以下代码将返回public static boolean isBiggerThanMaxLong(BigInteger l){ return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false; }

true

答案 3 :(得分:2)

如果triangle.lborderA确实很长,那么原始代码中的测试很简单,并且没有办法测试它。它也没用。

但是,如果triangle.lborderA是双精度数,则比较非常有用并且可以进行测试。 isBiggerThanMaxLong(1e300)确实返回true。

  public static boolean isBiggerThanMaxLong(double in){
    return in > Long.MAX_VALUE;
  }

答案 4 :(得分:0)

请记住 BigInteger 是一个类,而 long 是一个原始类型。如果您想比较比 long_max_value 大的值,请将您的值包装在 BigInteger 类中并将它们视为对象。