web-dev-qa-db-fra.com

Java équivalent de unsigned long long?

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?

103
eleven81

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.

55
Sean Bright

À 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);
132
Amr

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 .

12
Adam Rosenfield

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. .

7
Paul Tomblin

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.

6
keelar

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.

4
Peter Lawrey

Pour unsigned long, vous pouvez utiliser nsignedLong classe de bibliothèque Guava:

Il supporte diverses opérations:

  • plus
  • moins
  • fois
  • mod
  • divisé par

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.

4
Andrejs

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.

3
basszero

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>
2
user637338

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.

0
Mikalai Sabel