Question

C ++, j'apprécié d'avoir accès à un entier non signé de 64 bits, via unsigned long long int, ou via uint64_t. Maintenant, en Java 64 bits sont longs, je sais. Cependant, ils sont signés.

Y at-il un unsigned long (long) disponible en tant que primitive Java? Comment puis-je utiliser?

Était-ce utile?

La solution

Je ne crois pas. Une fois que vous voulez aller plus grand qu'un long signé, je pense que BigInteger est le seul (hors de la boîte) chemin à parcourir.

Autres conseils

Démarrage Java 8, il y a appui long (64 bits non signés) non signés. La façon dont vous pouvez l'utiliser est:

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

Pour 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 a pas. Vous devrez utiliser le type de données et primitive long traiter des questions de signedness, ou utiliser une classe comme BigInteger .

Non, il n'y a pas. Les concepteurs de Java sont dit publiquement qu'ils n'aimaient pas ints non signés. Utilisez un BigInteger à la place. Voir cette question pour plus de détails.

Java 8 fournit un ensemble de longues opérations non signés qui vous permet de traiter directement les variables à long comme unsigned long, dont voici quelques ceux couramment utilisés:

Et additions, soustractions, multiplications et sont les mêmes pour languit signés et non signés.

En fonction des opérations que vous devez effectuer un travail, le résultat est la même, signé ou non signé. Cependant, vous finirez par utiliser BigInteger sauf si vous utilisez des opérations futiles.

Pour unsigned long, vous pouvez utiliser UnsignedLong la classe de bibliothèque de goyave :

Il prend en charge diverses opérations:

  • plus
  • moins
  • fois
  • mod
  • dividedBy

La seule chose qui semble manquer au moment sont des opérateurs de décalage d'octets. Si vous avez besoin ceux que vous pouvez utiliser BigInteger de Java.

Java ne possède pas les types non signés. Comme déjà mentionné, incure les frais généraux de BigInteger ou utiliser JNI pour accéder à du code natif.

Le paquet org.apache.axis.types a

classe UnsignedLong.

pour maven:

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

On dirait en Java 8 certaines méthodes sont ajoutées longtemps pour traiter bon vieux [signé] longtemps non signé. Semble comme une solution de contournement, mais peut parfois aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top