Лучший способ преобразовать целое число со знаком в длинную без знака?

Для некоторых хеш-функций в Java было бы хорошо видеть значение как целое число без знака (например, для сравнения с другими реализациями), но Java поддерживает только подписанные типы. Мы можем конвертировать подписанныйint "без знака"long в качестве таких:

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

Однако это решение кажется излишним для того, что мы действительно делаем. Есть ли более эффективный способ добиться того же?

Ответы на вопрос(7)

Ваш ответ на вопрос