对于 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
然而,对于我们真正正在做的事情来说,这个解决方案似乎有点矫枉过正。有没有更有效的方法来实现同样的目标?
像这样的东西吗?
int x = -1;
long y = x & 0x00000000ffffffffL;
或者我错过了什么?
public static long getUnsignedInt(int x) {
return x & 0x00000000ffffffffL;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)