【发布时间】:2013-05-08 21:40:02
【问题描述】:
如何获得大于 Long.MAX_VALUE 的长数?
我希望这个方法返回true:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
【问题讨论】:
标签: java long-integer
如何获得大于 Long.MAX_VALUE 的长数?
我希望这个方法返回true:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
【问题讨论】:
标签: java long-integer
该方法无法返回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 类。
【讨论】:
triangle.lborderA 是 long 然后您可以删除该检查。如果它优化出来,我不会感到惊讶。
lborderA < 0 以使检查失败。同样,您不能通过if(Boolean.TRUE) 的检查失败。
com.coffeestainstudios.goatsimulator的包,就可以开始山羊的传送了!
你不能。如果你有一个名为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 都可以与 @ 一样大987654330@,不能大于这个。
您可以使用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) 确实返回 true。
public static boolean isBiggerThanMaxLong(double in){
return in > Long.MAX_VALUE;
}
【讨论】:
记住 BigInteger 是一个类,而 long 是一个原语。如果您想比较比 long_max_value 更大的值,请将您的值包装在 BigInteger 类中并将它们视为对象。
【讨论】: