在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
然而,这种解决方案似乎对我们实际要做的事情有些过度,是否有更有效率的方法来实现同样的事情呢?