Unsigned long en Java
Actuellement, je suis en utilisant les valeurs signées, -2^63 à 2^63-1. Maintenant j'ai besoin de la même gamme (2 * 2^64), mais avec des valeurs positives seulement. J'ai trouvé la java des documentations de mentionner unsigned long, qui conviennent à cet usage.
J'ai essayé de déclarer 2^64 pour un Long objet wrapper, mais il perd toujours les données, en d'autres mots, il ne capte jusqu'à la Long.MAX_VALUE
, donc je suis clairement en manque de quelque chose.
Est BigInteger
l'signé longtemps que Java prend en charge?
Est-il une définition ou un pointeur de comment déclarer et utiliser?
BigInteger est le chemin à parcourir.
Java prend en charge uniquement les longs signés. Période. Cependant, même si il y avait une telle chose comme un unsigned long, 2^64 est trop gros pour elle.
Il n'est pas long non signé, mais selon la situation, vous pouvez sortir avec traitement un long non signés.
Il n'y a unsigned long
Possible à cette question:stackoverflow.com/questions/508630/...
Java prend en charge uniquement les longs signés. Période. Cependant, même si il y avait une telle chose comme un unsigned long, 2^64 est trop gros pour elle.
Il n'est pas long non signé, mais selon la situation, vous pouvez sortir avec traitement un long non signés.
Il n'y a unsigned long
Possible à cette question:stackoverflow.com/questions/508630/...
OriginalL'auteur SpreeTheGr8 | 2017-06-07
Vous devez vous connecter pour publier un commentaire.
Java n'a pas de type unsigned long, mais vous pouvez traiter signé de 64 bits en complément à deux nombres entiers (c'est à dire
long
) unsigned si vous êtes prudent à ce sujet.De nombreux primitifs opérations sur entiers sont "signe agnostique"; par exemple, vous pouvez utiliser primitif Java addition, de la soustraction et de la multiplication, et d'obtenir la "bonne" réponse, pour un nombre non signé représentés à l'aide de
long
.Pour d'autres opérations telles que la division et la comparaison, la
Long
classe fournit une méthode commedivideUnsigned
etcompareUnsigned
qui va donner des résultats corrects pour les nombres représentés commelong
valeurs.(Ces opérations ont été ajoutés dans Java 8. Avant cela, vous pourriez utilise de la 3e partie des bibliothèques; par exemple, des méthodes statiques dans
com.google.commun.primitives.UnsignedLongs
.)UnsignedLong
classe.OriginalL'auteur Stephen C
Dans Java 8,
unsigned long
de soutien a été introduit. Encore, ces longs, mais le signe n'a pas d'incidence sur l'addition et la soustraction. Pour les divisant et en les comparant, vous avez consacré méthodes deLong
. Aussi, vous pouvez effectuer les opérations suivantes:BigInteger
est un peu différent. Il peut garder la grand nombre. Il les stocke commeint[]
et prend en charge l'arithmétique.Long.parseUnsignedLong
retourne longtemps, pas Longtemps.OriginalL'auteur xenteros
Si l'utilisation d'un tiers de la bibliothèque est une option, il est jOOU (une spin-off de la bibliothèque de jOOQ), qui offre des types wrapper pour les nombres entiers en Java. Ce n'est pas exactement la même chose que d'avoir un type de primitive (et donc de byte code) de support pour les types non signés, mais c'est peut-être encore assez bon pour votre cas d'utilisation.
Tous ces types d'étendre
java.lang.Number
et peut être converti en un ordre supérieur de type primitif etBigInteger
. Dans votre cas, les versions antérieures de jOOU simplement stockée le long non signé valeur dans unBigInteger
. Version 0.9.3 fait un peu frais le décalage de bits à l'ajustement de la valeur de l'ordinaire dans unelong
.(Disclaimer: je travaille pour la société à l'origine de ces bibliothèques)
OriginalL'auteur Lukas Eder