In C ++ hatte ich gerne Zugriff auf eine 64-Bit-Ganzzahl ohne Vorzeichen, via unsigned long long int
oder viauint64_t
. In Java sind Longs 64 Bit, ich weiß. Sie sind jedoch signiert.
Gibt es ein vorzeichenloses Long (Long) als Java-Grundelement? Wie benutze ich es?
Antworten:
Ich glaube nicht. Wenn Sie einmal größer als ein signiertes Long werden möchten, ist BigInteger meiner Meinung nach der einzige (sofort einsatzbereite ) Weg.
quelle
Ab Java 8 wird vorzeichenloses Long (vorzeichenloses 64-Bit) unterstützt. Sie können es folgendermaßen verwenden:
Um es zu drucken, können Sie nicht einfach l1 drucken, sondern müssen zuerst:
Dann
quelle
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
Nicht gerade elegant, da es keine Bereichsprüfung gibt, aber Sie können lange numerische Eingaben eingeben, die andernfalls den Bereich eines vorzeichenbehafteten Longs überschreiten könnten. (Nutzt die Tatsache, dassScanner::next(...)
auch ein Musterobjekt oder ein Zeichenkettenmuster akzeptiert werden kann.)Nein, das gibt es nicht. Sie müssen den primitiven
long
Datentyp verwenden und sich mit Signaturproblemen befassen oder eine Klasse wie zBigInteger
.quelle
Nein, gibt es nicht. Die Designer von Java geben bekannt, dass sie nicht signierte Ints nicht mochten. Verwenden Sie stattdessen eine BigInteger . Siehe diese Frage für Details.
quelle
Java 8 bietet eine Reihe von vorzeichenlosen Long-Operationen, mit denen Sie diese Long-Variablen direkt als vorzeichenlose Long-Variablen behandeln können. Hier sind einige häufig verwendete:
Additionen, Subtraktionen und Multiplikationen sind für vorzeichenbehaftete und vorzeichenlose Longs gleich.
quelle
Abhängig von den Operationen, die Sie ausführen möchten, ist das Ergebnis ähnlich, signiert oder nicht signiert. Wenn Sie jedoch keine trivialen Operationen verwenden, wird BigInteger verwendet.
quelle
Für unsigned long können Sie die UnsignedLong- Klasse aus der Guava-Bibliothek verwenden :
Es unterstützt verschiedene Operationen:
Das, was im Moment zu fehlen scheint, sind Byte-Shift-Operatoren. Wenn Sie diese benötigen, können Sie BigInteger von Java aus verwenden.
quelle
Java hat keine vorzeichenlosen Typen. Erhöhen Sie, wie bereits erwähnt, den Overhead von BigInteger oder verwenden Sie JNI, um auf nativen Code zuzugreifen.
quelle
Das Paket org.apache.axis.types enthält a
UnsignedLong-Klasse.
für maven:
quelle
Es scheint, als ob in Java 8 einige Methoden zu Long hinzugefügt wurden , um altes Gut [signiert] als nicht signiert zu behandeln. Scheint eine Problemumgehung zu sein, kann aber manchmal helfen.
quelle