Melhor maneira de converter um número inteiro assinado em um longo não assinad

Para certas funções de hash em Java, seria bom ver o valor como um número inteiro não assinado (por exemplo, para comparação com outras implementações), mas o Java suporta apenas tipos assinados. Podemos converter um @ assinaint para um "não assinado"long assim sendo

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

No entanto, esta solução parece um exagero para o que realmente estamos fazendo. Existe uma maneira mais eficiente de conseguir a mesma coisa?

questionAnswers(14)

yourAnswerToTheQuestion