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?

War es hilfreich?

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:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top