Подтвердить что ты не робот

Длина длиннее Long.MAX_VALUE

Как я могу получить длинное число больше Long.MAX_VALUE?

Я хочу, чтобы этот метод возвращал true:

boolean isBiggerThanMaxLong(long val) {
    return (val > Long.MAX_VALUE);
}
4b9b3361

Ответ 1

Этот метод не может вернуть 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.

Ответ 2

Вы не можете. Если у вас есть метод под названием isBiggerThanMaxLong(long), он всегда должен возвращать false.

Если вы должны увеличивать бит Long.MAX_VALUE, следующее значение должно быть Long.MIN_VALUE. Читайте на двух-дополнении, и это должно сказать вам, почему.

Ответ 3

Во-первых, приведенный ниже метод не компилируется, так как ему не хватает возвращаемого типа, и он должен быть 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

Ответ 4

Если triangle.lborderA действительно длинный, тогда тест в исходном коде тривиально истинен, и нет возможности его протестировать. Это также бесполезно.

Однако, если triangle.lborderA является двойным, сравнение полезно и может быть проверено. isBiggerThanMaxLong(1e300) возвращает true.

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

Ответ 5

Вы можете попробовать BigInteger, несмотря на то, что его использование сложное...