Java-Äquivalent von unsigned long long?
-
21-08-2019 - |
Frage
In C ++, genossen I Zugriff auf ein 64-Bit Integer ohne Vorzeichen aufweisen, über unsigned long long int
oder über uint64_t
. Nun, in Java longs 64 Bits sind, ich weiß. Allerdings sind sie unterzeichnet.
Gibt es eine unsigned long (lang) zur Verfügung als Java primitiven? Wie verwende ich es?
Lösung
Ich glaube nicht. Sobald Sie als eine signierte lange größer gehen wollen, glaube ich, BigInteger ist die einzige (aus der Box) Weg zu gehen.
Andere Tipps
Starten Java 8, gibt es Unterstützung für unsigned long (unsigned 64 Bit). Die Art und Weise Sie es verwenden können, ist:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
Um es zu drucken, können Sie nicht einfach l1 drucken, aber Sie müssen zuerst:
String l1Str = Long.toUnsignedString(l1)
Dann
System.out.println(l1Str);
Nein, gibt es nicht. Sie verlassen nun den primitiven long
Datentyp und befassen sich mit Signedness Fragen, oder verwenden Sie eine Klasse wie BigInteger
.
Nein, gibt es nicht. Die Entwickler von Java sind zu Protokoll, sie nicht unsigned ints mochte. Verwenden Sie einen BigInteger statt. Siehe diese Frage .
Java 8 bietet eine Reihe von unsigned long-Operationen, die Sie direkt zu behandeln, diese lang~~POS=TRUNC Variablen als unsigned long, here're einige häufig verwendete diejenigen erlaubt:
- toUnsignedString (long i)
- int compareUnsigned (long x, lange y)
- divideUnsigned (lange Dividende, lange Divisor)
- remainderUnsigned (lange Dividende, lange Divisor)
Und Additionen, Subtraktionen und Multiplikationen sind die gleichen für signierte und unsignierte longs.
Je nach den Operationen, die Sie ausführen möchten, ist das Ergebnis sehr ähnlich, mit oder ohne Vorzeichen. es sei denn, Sie triviale Operationen jedoch verwenden, werden Sie sich mit den BigInteger beenden.
Für unsigned long können Sie verwenden unsignedLong Klasse von Guava Bibliothek :
Es unterstützt verschiedene Operationen:
- und
- minus
- mal
- mod
- dividedBy
Die Sache, die Byte-Verschiebung scheint fehlende Operatoren im Moment. Wenn Sie diejenigen benötigen, können Sie BigInteger von Java verwenden.
Java hat keine unsigned-Typen. Wie bereits erwähnt, JNI nativen Zugriff auf Code incure den Overhead von BigInteger oder verwenden.
Das org.apache.axis.types Paket hat ein
unsignedLong Klasse.
für Maven:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
Scheint, wie in Java 8 werden einige Methoden hinzugefügt lange alt gut zu behandeln [unterzeichnet] lange nicht signiert. Scheint, wie dieses Problem zu umgehen, kann aber manchmal helfen.