Wie kann ich eine lange Zahl größer als Long.MAX_VALUE erhalten?
Ich möchte, dass diese Methode zurückkehrt true
:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
gongschw
Wie kann ich eine lange Zahl größer als Long.MAX_VALUE erhalten?
Ich möchte, dass diese Methode zurückkehrt true
:
boolean isBiggerThanMaxLong(long val) {
return (val > Long.MAX_VALUE);
}
Djechlin
Diese Methode kann nicht zurückkehren true
. Das ist die Punkt von Long.MAX_VALUE
. Es wäre Ja wirklich verwirrend, wenn sein Name … falsch wäre. Dann sollte es einfach aufgerufen werden Long.SOME_FAIRLY_LARGE_VALUE
und haben buchstäblich null sinnvolle Verwendungen. Nutze einfach die von Android isUserAGoat
oder Sie können Ihre eigene Funktion würfeln, die immer zurückkehrt false
.
Beachten Sie, dass a long
im Speicher dauert eine feste Anzahl von Bytes. Von Oracle:
long: Der long-Datentyp ist eine vorzeichenbehaftete 64-Bit-Zweierkomplement-Ganzzahl. Es hat einen Mindestwert von -9.223.372.036.854.775.808 und einen Höchstwert von 9.223.372.036.854.775.807 (einschließlich). Verwenden Sie diesen Datentyp, wenn Sie einen Wertebereich benötigen, der größer ist als der von int bereitgestellte.
Wie Sie vielleicht aus der Informatik oder der diskreten Mathematik wissen, gibt es für Long 2^64 mögliche Werte, da es sich um 64 Bit handelt. Und wie Sie aus diskreter Mathematik oder Zahlentheorie oder gesundem Menschenverstand wissen, muss eine von ihnen die größte sein, wenn es nur endlich viele Möglichkeiten gibt. Das wäre Long.MAX_VALUE
. Sie fragen also etwas Ähnliches wie “Gibt es eine ganze Zahl, die > 0 und < 1 ist?" Mathematisch unsinnig.
Wenn Sie dies tatsächlich für etwas wirklich brauchen, dann verwenden Sie es BigInteger
Klasse.
Jemand sollte daran arbeiten, den isUserAGoat-API-Äther zu brechen, indem er die Teleportation erfindet, oder zumindest ein Android-Gadget für Ziegen erstellen.
– Mr.Me
14. Mai 2013 um 14:44 Uhr
@gongshw vorausgesetzt triangle.lborderA
ist ein long
dann können Sie diese Überprüfung löschen. Ich würde mich nicht wundern, wenn es optimiert wird.
– Djechlin
14. Mai 2013 um 14:56 Uhr
Der zu testende Quellcode enthält das Urteil “dreieck.lborderA > 0 && dreieck.lborderA <= Long.MAX_VALUE". Es scheint also, dass ich meinen Komponententest nicht zu 100% abdecken kann.
– gongshw
14. Mai 2013 um 14:57 Uhr
@gongshw versuchen lborderA < 0
diese Prüfung nicht bestehen. Ebenso können Sie eine Prüfung nicht bestehen, die besagt if(Boolean.TRUE)
.
– Djechlin
14. Mai 2013 um 15:00 Uhr
@Mr.Me Nun, laut dieser Antwort, wenn Sie das Paket herunterladen com.coffeestainstudios.goatsimulator
dann kann die Teleportation der Ziegen beginnen!
– MC Kaiser
19. Oktober 2017 um 11:05 Uhr
Du kannst nicht. Wenn Sie eine Methode aufgerufen haben isBiggerThanMaxLong(long)
es sollte immer zurückkehren false
.
Wenn Sie die Bits von erhöhen würden Long.MAX_VALUE
sollte der nächste Wert sein Long.MIN_VALUE
. Informieren Sie sich über das Zweierkomplement und das sollte Ihnen sagen, warum.
AllTooSir
Erstens wird die folgende Methode nicht kompiliert, da ihr der Rückgabetyp fehlt und es sein sollte Long.MAX_VALUE
anstelle von Long.Max_value
.
public static boolean isBiggerThanMaxLong(long value) {
return value > Long.Max_value;
}
Die obige Methode kann niemals zurückkehren true
wie Sie vergleichen a long
Wert mit Long.MAX_VALUE
sehen Sie sich die Methodensignatur an, die Sie nur übergeben können long
dort.Beliebig long
kann so groß sein wie die Long.MAX_VALUE
es kann nicht größer sein.
Mit so etwas kann man es versuchen BigInteger Klasse :
public static boolean isBiggerThanMaxLong(BigInteger l){
return l.compareTo(BigInteger.valueOf(Long.MAX_VALUE))==1?true:false;
}
Der folgende Code wird zurückgegeben true
:
BigInteger big3 = BigInteger.valueOf(Long.MAX_VALUE).
add(BigInteger.valueOf(Long.MAX_VALUE));
System.out.println(isBiggerThanMaxLong(big3)); // prints true
Wenn triangle.lborderA
ist ja lange dann ist der test im original code trivialerweise wahr und es gibt keine möglichkeit ihn zu testen. Es ist auch nutzlos.
jedoch, wenn triangle.lborderA
ein Double ist, ist der Vergleich sinnvoll und kann getestet werden. isBiggerThanMaxLong(1e300)
gibt wahr zurück.
public static boolean isBiggerThanMaxLong(double in){
return in > Long.MAX_VALUE;
}
Denken Sie daran, BigInteger ist eine Klasse und long ist ein Primitiv. Wenn Sie größere Werte als long_max_value vergleichen möchten, schließen Sie Ihren Wert in die BigInteger-Klasse ein und behandeln Sie sie als Objekte.
Schiwam
Ein “long”, das größer als der maximale Wert von long ist, existiert einfach nicht. Ich schlage vielmehr vor, dass Sie die biginteger-Klasse verwenden und den maximalen Wert von long in eine biginteger umwandeln.