Ein Long größer als Long.MAX_VALUE

Lesezeit: 2 Minuten

gongshws Benutzeravatar
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);
}

Benutzeravatar von djechlin
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 isUserAGoatoder 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.goatsimulatordann 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_VALUEsollte der nächste Wert sein Long.MIN_VALUE. Informieren Sie sich über das Zweierkomplement und das sollte Ihnen sagen, warum.

Benutzeravatar von AllTooSir
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_VALUEes 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.

shivams Benutzeravatar
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.

1436040cookie-checkEin Long größer als Long.MAX_VALUE

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy