将有符号整数转换为无符号长整型的最佳方法?
对于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
但是,对于我们真正正在做的事情来说,这种解决方案似乎有些过分。有没有更有效的方法来实现同样的事情?