长于Long.MAX_VALUE的长度

gon*_*shw 32 java long-integer

如何获得比Long.MAX_VALUE更大的长数字?

我想要这个方法返回true:

boolean isBiggerThanMaxLong(long val) {
    return (val > Long.MAX_VALUE);
}
Run Code Online (Sandbox Code Playgroud)

dje*_*lin 61

那种方法无法回归true.这是该Long.MAX_VALUE.如果它的名字是......假的,那真是令人困惑.然后它应该被调用Long.SOME_FAIRLY_LARGE_VALUE,并且实际上没有合理的用途.只需使用AndroidisUserAGoat,或者您可以滚动自己的功能,始终返回false.

请注意,long内存中需要固定的字节数. 来自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类.

  • 有人应该通过发明远程传送或至少为山羊创建一个Android小工具来打破isUserAGoat API ether. (5认同)
  • @gongshw 尝试 `lborderA &lt; 0` 以失败该检查。类似地,您不能通过“if(Boolean.TRUE)”检查失败。 (2认同)

Jam*_*nen 11

你不能.如果你有一个叫做的方法,isBiggerThanMaxLong(long)它应该总是返回false.

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


NIN*_*OOP 5

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

public static boolean isBiggerThanMaxLong(long value) {
      return value > Long.Max_value;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

以下代码将返回true

BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
                  add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true
Run Code Online (Sandbox Code Playgroud)