Un largo mayor que Long.MAX_VALUE

2 minutos de lectura

avatar de usuario de gongshw
gongshw

¿Cómo puedo obtener un número largo mayor que Long.MAX_VALUE?

Quiero que este método regrese true:

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

avatar de usuario de djechlin
djechlin

Ese método no puede regresar true. Eso es punto de Long.MAX_VALUE. Podría ser De Verdad confuso si su nombre fuera… falso. Entonces debería llamarse simplemente Long.SOME_FAIRLY_LARGE_VALUE y tienen literalmente cero usos razonables. Solo usa Android isUserAGoato puede lanzar su propia función que siempre devuelve false.

Tenga en cuenta que un long en la memoria ocupa un número fijo de bytes. de oráculo:

long: el tipo de datos long es un entero de complemento a dos con signo de 64 bits. Tiene un valor mínimo de -9.223.372.036.854.775.808 y un valor máximo de 9.223.372.036.854.775.807 (inclusive). Utilice este tipo de datos cuando necesite un rango de valores más amplio que los proporcionados por int.

Como sabrá por la informática básica o las matemáticas discretas, hay 2^64 valores posibles para un largo, ya que son 64 bits. Y como saben por las matemáticas discretas o la teoría de números o el sentido común, si solo hay un número finito de posibilidades, una de ellas tiene que ser la más grande. Eso sería Long.MAX_VALUE. Entonces, está preguntando algo similar a “¿hay un número entero que sea> 0 y

Si realmente necesita esto para algo real, entonces use BigInteger clase.

  • Alguien debería trabajar para romper el éter de la API isUserAGoat inventando la teletransportación o al menos creando un dispositivo Android para cabras.

    – Sr. Yo

    14 mayo 2013 a las 14:44

  • @gongshw asumiendo triangle.lborderA es un long entonces puede eliminar ese cheque. No me sorprendería si se optimiza.

    – Djechlin

    14 mayo 2013 a las 14:56

  • El código fuente para probar contiene el juicio “triangle.lborderA > 0 && Triangle.lborderA

    – gongshw

    14 mayo 2013 a las 14:57

  • @gongshw prueba lborderA < 0 fallar ese control. Del mismo modo, no puede fallar un cheque que dice if(Boolean.TRUE).

    – Djechlin

    14 mayo 2013 a las 15:00

  • @Mr.Me Bueno, de acuerdo con esta respuesta, si descarga el paquete com.coffeestainstudios.goatsimulator¡entonces puede comenzar la teletransportación de las cabras!

    – Emperador MC

    19 oct 2017 a las 11:05

no puedes Si tienes un método llamado isBiggerThanMaxLong(long) siempre debe volver false.

Si fueras a incrementar los bits de Long.MAX_VALUEel siguiente valor debe ser Long.MIN_VALUE. Lee sobre el complemento a dos y eso debería decirte por qué.

Avatar de usuario de AllTooSir
TodoTambiénSeñor

En primer lugar, el siguiente método no se compila porque le falta el tipo de retorno y debería ser Long.MAX_VALUE en lugar de Long.Max_value.

public static boolean isBiggerThanMaxLong(long value) {
      return value > Long.Max_value;
}

El método anterior nunca puede volver true mientras comparas un long valor con Long.MAX_VALUE vea la firma del método que solo puede pasar long Hay alguna long puede ser tan grande como el Long.MAX_VALUEno puede ser más grande que eso.

Puedes probar algo como esto con Entero grande clase :

public static boolean isBiggerThanMaxLong(BigInteger l){
    return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false;
}

El siguiente código devolverá true :

BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
                  add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true

Si triangle.lborderA es de hecho mucho tiempo, entonces la prueba en el código original es trivialmente cierta, y no hay forma de probarla. También es inútil.

Sin embargo, si triangle.lborderA es un doble, la comparación es útil y se puede probar. isBiggerThanMaxLong(1e300) devuelve verdadero.

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

Solo recuerda BigInteger es una clase y long es un primitivo. Si desea comparar valores grandes que long_max_value, envuelva su valor en la clase BigInteger y trátelos como objetos.

avatar de usuario de shivam
Shivam

Un “long” mayor que el valor máximo de long simplemente no existe, más bien le sugiero que use la clase biginteger y convierta el valor máximo de long en un biginteger.

¿Ha sido útil esta solución?