下面是破解编码面试书10-4题解法中BitSet的实现。为什么它分配一个 size/32 而不是 (size/32 + 1) 的数组。我在这里遗漏了什么还是这是一个错误?
如果我将 33 传递给 BitSet 的构造函数,那么我将只分配一个 int,如果我尝试设置或获取位 32,我将获得一个 AV!
package Question10_4;
class BitSet {
int[] bitset;
public BitSet(int size) {
bitset = new int[size >> 5]; // divide by 32
}
boolean get(int pos) {
int wordNumber = (pos >> 5); // divide by 32
int bitNumber = (pos & 0x1F); // mod 32
return (bitset[wordNumber] & (1 << bitNumber)) != 0;
}
void set(int pos) {
int wordNumber = (pos >> 5); // divide by 32
int bitNumber = (pos & 0x1F); // mod 32
bitset[wordNumber] |= 1 << bitNumber;
}
}