java - 大于 64 位的快速位掩码

java - fast bitmasks larger than 64 bits

处理已知大小但大于 64 位的位掩码(即执行所有按位操作)的最有效数据结构是什么?

byte[]BigInteger?完全是别的东西?

需要 Java 7 兼容,并且对于诸如

if(bitmask & 7 != 0){...}

bitmask1 |= bitmask2

等等。

你不能直接这样做,因为可以用作位掩码的原始数字的最大大小实际上是长值的 64 位。您可以做的是将位掩码拆分为 2 个或更多 int 或 long,然后手动管理它。

int[] mask = new int[4];
final int MAX_SHIFT = 32;

void set(int b) {
  mask[b / MAX_SHIFT] |= 1 << (b % MAX_SHIFT);
}

boolean isSet(int b) {
  return (mask[b / MAX_SHIFT] & (1 << (b % MAX_SHIFT))) != 0;
}

或者你使用 BitSet

BitSet bitSet = new BitSet(101);
bitSet.set(100);