Как я могу получить длинное число больше Long.MAX_VALUE?
Я хочу, чтобы этот метод возвращал true
:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
Как я могу получить длинное число больше Long.MAX_VALUE?
Я хочу, чтобы этот метод возвращал true
:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
Этот метод не может вернуть true
. Это точка Long.MAX_VALUE
. Было бы очень странно, если бы его имя было... ложным. Тогда он должен просто называться Long.SOME_FAIRLY_LARGE_VALUE
и иметь буквально ноль разумных применений. Просто используйте Android isUserAGoat
, или вы можете свернуть свою собственную функцию, которая всегда возвращает false
.
Обратите внимание, что long
в памяти занимает фиксированное количество байтов. Из Oracle:
long: тип данных long представляет собой 64-разрядное целое число со знаком из двух дополнений. Он имеет минимальное значение -9, 223 372 036 854 775 808 и максимальное значение 9 223 372 036 854 775 807 (включительно). Используйте этот тип данных, когда вам нужен диапазон значений, более широкий, чем тот, который предоставляет int.
Как вы, возможно, знаете из базовой информатики или дискретной математики, существует 2 ^ 64 возможных значений для long, поскольку оно составляет 64 бита. И, как вы знаете из дискретной математики или теории чисел или здравого смысла, если существует только конечное число возможностей, одна из них должна быть самой большой. Это было бы Long.MAX_VALUE
. Итак, вы спрашиваете что-то похожее на "есть ли целое число, которое> 0 и <1?" Математически бессмысленно.
Если вам это действительно нужно для чего-то реального, используйте класс BigInteger
.
Вы не можете. Если у вас есть метод под названием 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)
возвращает true.
public static boolean isBiggerThanMaxLong(double in){
return in > Long.MAX_VALUE;
}
Вы можете попробовать BigInteger, несмотря на то, что его использование сложное...