关于java:长于Long.MAX_VALUE的长整型

A long bigger than Long.MAX_VALUE

如何获得大于long.max_值的长数值?

我希望此方法返回true

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

该方法不能返回true。这就是EDOCX1的观点。如果它的名字是…错误的。那么,它应该被称为Long.SOME_FAIRLY_LARGE_VALUE,并没有任何合理的用途。只需使用Android的isUserAGoat,或者你可以滚动你自己的函数,它总是返回false

注意,内存中的long采用固定的字节数。来自Oracle:

long: The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive). Use this data type when you need a range of values wider than those provided by int.

正如你从基础计算机科学或离散数学中所知道的,长时间内可能有2^64个值,因为它是64位的。正如你从离散数学、数论或常识中所知道的,如果只有有限多的可能性,其中之一必须是最大的。那就是Long.MAX_VALUE。所以你会问类似于"是否有一个大于0且小于1的整数?"数学上毫无意义。

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


不能。如果有一个名为isBiggerThanMaxLong(long)的方法,它应该始终返回false

如果要增加Long.MAX_VALUE的位,下一个值应该是Long.MIN_VALUE。读两遍补语,你就会明白为什么。


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

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

上面的方法不能返回true,因为你比较long值和Long.MAX_VALUE值,看方法签名,你只能通过long,任何long都可以和Long.MAX_VALUE一样大,不能大于。

您可以使用BigInteger类尝试类似的操作:

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

以下代码将返回true

1
2
3
BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
                  add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true

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

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

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