Domanda

In C ++, ho apprezzato avere accesso a un numero intero senza segno a 64 bit, tramite unsigned long long int, o tramite uint64_t. Ora, a Longs Java sono 64 bit, lo so. Tuttavia, essi sono firmati.

C'è un unsigned long (lungo) disponibile come una primitiva Java? Come si usa?

È stato utile?

Soluzione

Non credo così. Una volta che si vuole andare più grande di un lungo firmato, credo BigInteger è l'unica (out of the box) strada da percorrere.

Altri suggerimenti

A partire Java 8, v'è il supporto per unsigned long (unsigned 64 bit). Il modo in cui si può utilizzare è:

Long l1 = Long.parseUnsignedLong("17916881237904312345");

Per stamparlo, non si può semplicemente stampare l1, ma si deve prima:

String l1Str = Long.toUnsignedString(l1)

Poi

System.out.println(l1Str);

No, non c'è. Dovrete usare il long tipo di dati di base e affrontare le questioni signedness, o utilizzare una classe come BigInteger .

No, non c'è. I progettisti di Java sono il record come dicendo che non piace unsigned int. Utilizzare un BigInteger invece . Vedi questa domanda per i dettagli.

Java 8 fornisce una serie di lunghe operazioni senza segno che consente di trattare direttamente le variabili fino a quando unsigned long, here're alcuni tra quelli comunemente utilizzati:

E le aggiunte, sottrazioni, moltiplicazioni e sono gli stessi per Longs firmati e non firmati.

A seconda delle operazioni che si intende eseguire, il risultato è più o meno lo stesso, con o senza segno. Tuttavia, a meno che non si sta utilizzando operazioni banali si finirà con BigInteger.

Per unsigned long è possibile utilizzare unsignedLong classe da biblioteca Guava :

Supporta varie operazioni:

  • più
  • meno
  • volte
  • mod
  • dividedBy

La cosa che sembra mancare al momento sono operatori di spostamento di byte. Se avete bisogno di quelli che si possono utilizzare BigInteger da Java.

Java non ha tipi senza segno. Come già accennato, incure il sovraccarico di BigInteger o utilizzare JNI per accedere codice nativo.

Il pacchetto org.apache.axis.types ha una

class unsignedLong.

per Maven:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

Sembra che in Java 8 alcuni metodi vengono aggiunti a lungo per il trattamento di vecchio buon [firmato] finché non firmato. Sembra una soluzione, ma può aiutare a volte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top