¿La mejor manera de convertir un entero con signo a un largo sin signo?

Para ciertas funciones hash en Java, sería bueno ver el valor como un entero sin signo (por ejemplo, para compararlo con otras implementaciones), pero Java solo admite tipos con signo. Podemos convertir un @ firmaint a un "sin firmar"long como tal

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 exagerada para lo que realmente estamos haciendo. ¿Existe una forma más eficiente de lograr lo mismo?

Respuestas a la pregunta(14)

Su respuesta a la pregunta