119 votes

L'équivalent Java de unsigned long long ?

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

Existe-t-il un unsigned long (long) disponible en tant que primitive Java ? Comment l'utiliser ?

5 votes

NOTE La réponse acceptée est périmée à partir de Java 8 et plus. Voir le Réponse de GigaStore pour la nouvelle fonctionnalité permettant de demander à Java de considérer un nombre comme non signé. Pas pour un usage quotidien, mais pratique quand on en a besoin.

61voto

Sean Bright Points 39480

Je ne le crois pas. Dès que vous voulez dépasser une longueur signée, je pense que BigInteger est la seule façon de procéder (en dehors de la boîte).

19 votes

Cette réponse est un peu dépassée (elle a été publiée en 2009). À partir de Java 8 (sorti en mars 2014), il y a un support pour les unsigned long. Vérifiez un exemple que j'ai posté ci-dessous comme réponse.

12voto

Adam Rosenfield Points 176408

Non, il n'y en a pas. Vous devrez utiliser la primitive long et gérer les problèmes de signature, ou utiliser une classe telle que BigInteger .

8voto

Paul Tomblin Points 83687

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

23 votes

Je respecte Gosling pour ce qu'il a fait, mais je pense que sa défense de l'absence d'ints non signés est l'une des excuses les plus stupides que j'ai jamais entendues :-) Il y a bien plus de choses louches en Java que des ints non signés... :-)

1 votes

Gosling, à JavaPolis 2007, a donné un exemple qui ne fonctionne pas pour les ints non signés. Josh Bloch a fait remarquer que cela ne fonctionne pas non plus pour les ints signés. Les entiers de taille arbitraire ftw !

0 votes

4voto

Peter Lawrey Points 229686

Selon les opérations que vous avez l'intention d'effectuer, le résultat est à peu près le même, signé ou non signé. Cependant, à moins que vous n'utilisiez des opérations triviales, vous finirez par utiliser BigInteger.

3voto

basszero Points 14539

Java n'a pas de types non signés. Comme nous l'avons déjà mentionné, il faut supporter l'overhead de BigInteger ou utiliser JNI pour accéder au code natif.

16 votes

Char est une valeur non signée de 16 bits ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X