Para ciertas funciones hash en Java, sería bueno ver el valor como un entero sin signo (por ejemplo, para comparar con otras implementaciones), pero Java solo admite tipos firmados. Podemos convertir un int
firmado a un "sin firmar" long
como tal:¿La mejor manera de convertir un entero con signo en un largo sin firmar?
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
Sin embargo, esta solución parece un exceso de lo que realmente estamos haciendo. ¿Hay una manera más eficiente de lograr lo mismo?
+1 derecha. No, era a mí a quien le faltaba algo; me confundí con conversiones cada vez mayores y perdí de vista el enfoque simple =) – maerics
Meh, sucede. Especialmente en C++ donde hay miles de formas de hacer todo. – Mysticial
¿Funcionaría 'x & 0xFFFFFFFFL' también? – Paranaix