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);
处理已知大小但大于 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);