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

时间:2017-10-06 12:42:15

标签: java arrays bit-manipulation java-7 biginteger

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

byte[]BigInteger?还有其他什么呢?

需要与Java 7兼容,并且应该快速(或者至少与合理预期的一样快,考虑到它们的大小),例如

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

bitmask1 |= bitmask2

等等。

1 个答案:

答案 0 :(得分:3)

您无法直接执行此操作,因为可用作位掩码的原始数字的最大大小实际上是长值的64位。您可以做的是将位掩码分成2个或更多的整数或长整数然后手动管理。

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);