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);
}
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 isUserAGoat
o 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 unlong
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 diceif(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_VALUE
el siguiente valor debe ser Long.MIN_VALUE
. Lee sobre el complemento a dos y eso debería decirte por qué.
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_VALUE
no 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.
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.