52

How can I get a long number bigger than Long.MAX_VALUE?

I want this method to return true:

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

5 回答 5

88

该方法无法返回true。这就是重点。如果它的名字是……假的,Long.MAX_VALUE真是令人困惑。然后它应该被称为Long.SOME_FAIRLY_LARGE_VALUE并且实际上具有零合理用途。只需使用Android 的isUserAGoat,或者您可以推出自己的始终返回的函数false

请注意,long内存中的 a 占用固定数量的字节。 来自甲骨文

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 的整数?” 数学上无厘头。

如果你真的需要这个,那么使用BigIntegerclass.

于 2013-05-14T14:37:01.320 回答
14

你不能。如果你有一个方法被调用isBiggerThanMaxLong(long),它应该总是返回false

如果要增加 的位Long.MAX_VALUE,则下一个值应该是Long.MIN_VALUE。阅读二进制补码,这应该会告诉您原因。

于 2013-05-14T14:37:14.057 回答
5

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

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

true当您将long值与进行比较时,上述方法永远不会返回 Long.MAX_VALUE,请参阅您只能在那里传递的方法签名long。任何long可以与 一样大Long.MAX_VALUE,不能大于。

您可以使用BigInteger类尝试这样的事情:

public static boolean isBiggerThanMaxLong(BigInteger l){
    return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false;
}

以下代码将返回true

BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
                  add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true
于 2013-05-14T14:39:04.203 回答
3

如果triangle.lborderA确实很长,那么原始代码中的测试是微不足道的,没有办法测试它。它也是无用的。

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

  public static boolean isBiggerThanMaxLong(double in){
    return in > Long.MAX_VALUE;
  }
于 2013-05-14T15:15:30.390 回答
0

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

于 2021-04-15T22:31:30.963 回答