Pour certaines fonctions de hachage en Java, il serait agréable de voir la valeur sous la forme d'un nombre entier non signé (par exemple, pour la comparaison avec d'autres implémentations), mais Java ne prend en charge que les types signés. Nous pouvons convertir une valeur signée int
à un "non signé" long
comme tel :
public static final int BITS_PER_BYTE = 8;
public static long getUnsignedInt(int x) {
ByteBuffer buf = ByteBuffer.allocate(Long.SIZE / BITS_PER_BYTE);
buf.putInt(Integer.SIZE / BITS_PER_BYTE, x);
return buf.getLong(0);
}
getUnsignedInt(-1); // => 4294967295
Cependant, cette solution semble excessive pour ce que nous faisons réellement. Existe-t-il un moyen plus efficace d'obtenir le même résultat ?