将有符号整数转换为无符号长整型的最佳方法?

2022-08-31 15:47:07

对于Java中的某些哈希函数,最好将值视为无符号整数(例如,用于与其他实现进行比较),但Java仅支持有符号类型。我们可以将有符号转换为“无符号”,如下所示:intlong

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

但是,对于我们真正正在做的事情来说,这种解决方案似乎有些过分。有没有更有效的方法来实现同样的事情?


答案 1

像这样的东西?

int x = -1;
long y = x & 0x00000000ffffffffL;

还是我错过了什么?

public static long getUnsignedInt(int x) {
    return x & 0x00000000ffffffffL;
}

答案 2

Java 8中的标准方式是Integer.toUnsignedLong(someInt),这相当于@Mysticial的答案


推荐