一尘不染

BitSet往返整数/长整数

java

如果我想对整数进行位操作,如何将其加载到java.util.BitSet?中?如何将其转换回int或long?我不太担心BitSet它的大小,它总是32或64位长。我只是想使用set()clear()nextSetBit(),和nextClearBit()方法,而不是位运算符,但我无法找到一个简单的方法来初始化位集以数字类型。


阅读 195

收藏
2020-09-08

共1个答案

一尘不染

以下代码从一个长值创建一个位集,反之亦然:

public class Bits {

  public static BitSet convert(long value) {
    BitSet bits = new BitSet();
    int index = 0;
    while (value != 0L) {
      if (value % 2L != 0) {
        bits.set(index);
      }
      ++index;
      value = value >>> 1;
    }
    return bits;
  }

  public static long convert(BitSet bits) {
    long value = 0L;
    for (int i = 0; i < bits.length(); ++i) {
      value += bits.get(i) ? (1L << i) : 0L;
    }
    return value;
  }
}

编辑:现在两个方向,@leftbrain:原因,你是对的

2020-09-08