3

以下は、コーディングインタビューブックのクラックでの質問 10-4 のソリューションでの BitSet の実装です。(サイズ/32 + 1) ではなく、サイズ/32 の配列を割り当てるのはなぜですか。ここで何か不足していますか、それともバグですか?

BitSet のコンストラクターに 33 を渡すと、1 つの 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;
    }

}

4

2 に答える 2