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);
}
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);
}
该方法无法返回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 的整数?” 数学上无厘头。
如果你真的需要这个,那么使用BigInteger
class.
你不能。如果你有一个方法被调用isBiggerThanMaxLong(long)
,它应该总是返回false
。
如果要增加 的位Long.MAX_VALUE
,则下一个值应该是Long.MIN_VALUE
。阅读二进制补码,这应该会告诉您原因。
首先,下面的方法无法编译,因为它缺少返回类型,它应该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
如果triangle.lborderA
确实很长,那么原始代码中的测试是微不足道的,没有办法测试它。它也是无用的。
但是,如果triangle.lborderA
是双精度,则比较很有用并且可以进行测试。isBiggerThanMaxLong(1e300)
确实返回真。
public static boolean isBiggerThanMaxLong(double in){
return in > Long.MAX_VALUE;
}
请记住 BigInteger 是一个类,而 long 是一个原语。如果要比较比 long_max_value 更大的值,请将值包装在 BigInteger 类中并将它们视为对象。