En C ++, j'ai apprécié avoir accès à un entier non signé 64 bits, via unsigned long long int
ou via uint64_t
. Maintenant, en Java, les longs sont 64 bits, je sais. Cependant, ils sont signés.
Un long (long) non signé est-il disponible en tant que primitive Java? Comment l'utiliser?
Réponses:
Je ne crois pas. Une fois que vous voulez aller plus grand qu'un long signé, je pense que BigInteger est la seule solution ( prête à l' emploi ).
la source
À partir de Java 8, il existe un support pour unsigned long (non signé 64 bits). La façon dont vous pouvez l'utiliser est:
Pour l'imprimer, vous ne pouvez pas simplement imprimer l1, mais vous devez d'abord:
ensuite
la source
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
Pas vraiment élégant car il manque une vérification de plage, mais cela vous permettrait de tirer de longues entrées numériques qui, autrement, dépasseraient la plage d'un long signé. (Exploite le fait qu'ilScanner::next(...)
peut également accepter un objet Pattern ou un motif String.)Non, il n'y en a pas. Vous devrez utiliser le
long
type de données primitif et gérer les problèmes de signature, ou utiliser une classe telle queBigInteger
.la source
Non, il n'y en a pas. Les concepteurs de Java ont déclaré qu'ils n'aimaient pas les entiers non signés. Utilisez plutôt un BigInteger . Voir cette question pour plus de détails.
la source
Java 8 fournit un ensemble d'opérations longues non signées qui vous permettent de traiter directement ces variables Long comme non signées Long, en voici quelques-unes couramment utilisées:
Et les additions, soustractions et multiplications sont les mêmes pour les longs signés et non signés.
la source
Selon les opérations que vous envisagez d'effectuer, le résultat est sensiblement le même, signé ou non. Cependant, à moins que vous n'utilisiez des opérations triviales, vous finirez par utiliser BigInteger.
la source
Pour unsigned long, vous pouvez utiliser la classe UnsignedLong de la bibliothèque Guava :
Il prend en charge diverses opérations:
Ce qui semble manquer pour le moment, ce sont les opérateurs de décalage d'octets. Si vous en avez besoin, vous pouvez utiliser BigInteger de Java.
la source
Java n'a pas de types non signés. Comme déjà mentionné, augmentez la charge de BigInteger ou utilisez JNI pour accéder au code natif.
la source
Le package org.apache.axis.types a un
UnsignedLong classe.
pour maven:
la source
On dirait que dans Java 8, certaines méthodes sont ajoutées à Long pour traiter l'ancien bon [signé] tant que non signé. Cela semble être une solution de contournement, mais peut parfois aider.
la source