En C++, j'ai eu le plaisir d’avoir accès à un entier non signé de 64 bits, via unsigned long long int
ou via uint64_t
. Maintenant, dans Java longs sont de 64 bits, je sais. Cependant, ils sont signés.
Existe-t-il une longue (longue) non signée disponible en tant que primitive Java? Comment l'utilise-t-on?
Je ne crois pas Une fois que vous voulez aller plus gros qu'un long signé, je pense que BigInteger est le seul chemin à parcourir.
À partir de Java 8, il existe une prise en charge de unsigned long (unsigned 64 bits). Voici comment vous pouvez l’utiliser:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
Pour l’imprimer, vous ne pouvez pas simplement imprimer l1, mais vous devez d’abord:
String l1Str = Long.toUnsignedString(l1)
Ensuite
System.out.println(l1Str);
Non, il n'y en a pas. Vous devrez utiliser le type de données primitif long
et résoudre les problèmes de signature, ou utiliser une classe telle que BigInteger
.
Non, il n'y en a pas. Les concepteurs de Java déclarent ne pas aimer les ints non signés. Utilisez plutôt un BigInteger . Voir cette question pour plus de détails. .
Java 8 fournit un ensemble d'opérations longues non signées qui vous permet de traiter directement ces variables longues comme non signées Long. Voici quelques-unes de celles couramment utilisées:
Et les additions, soustractions et multiplications sont les mêmes pour les longs contrats signés et non signés.
En fonction des opérations que vous souhaitez effectuer, le résultat est sensiblement identique, signé ou non signé. Cependant, sauf si vous utilisez des opérations triviales, vous finirez par utiliser BigInteger.
Pour unsigned long, vous pouvez utiliser nsignedLong classe de bibliothèque Guava:
Il supporte diverses opérations:
Ce qui semble manquer pour le moment, ce sont les opérateurs de décalage d'octet. Si vous en avez besoin, vous pouvez utiliser BigInteger à partir de Java.
Java n'a pas de types non signés. Comme déjà mentionné, augmentez les frais généraux de BigInteger ou utilisez JNI pour accéder au code natif.
Le package org.Apache.axis.types a un
UnsignedLong class.
pour maven:
<dependency>
<groupId>org.Apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
Cela ressemble à Java 8 certaines méthodes sont ajoutées à Long pour traiter les anciens bons [signés] depuis longtemps comme non signés. Cela ressemble à une solution de contournement, mais cela peut parfois aider.