【发布时间】:2012-03-23 15:11:07
【问题描述】:
对于 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
但是,这个解决方案对于我们真正在做的事情来说似乎有点过头了。有没有更有效的方法来实现同样的目标?
【问题讨论】: