私は本のプログラミングパールで質問を勉強しています.彼らはこの関数をビットベクトルにビットを設定することを勧めました. 私はそれが何をするのか少し混乱しています。
#define BITSPERWORD 32
#define MASK 0x1F
#define SHIFT 5
#define N 1000000
int a[1 + N/BITSPERWORD];
void set(int i){
a[i >> SHIFT] |= (1 << (i & MASK));
}
これが、このコードの私の (おそらく間違った) 解釈です。i = 64 の場合、
1) 最初に、それを受け取りi
、SHIFT (5) ビットだけ右にシフトします。これは、除算 (私が最初に考えたように乗算ではありません) と同等i
です2^5
。したがって、 の場合、 a のインデックスi
は64
2
(64 / 2^5)
2) a[2] |= (1 << (64 & MASK))
64 & 1 = 1000000 & 01 = 1000001
.
では、1 は何ビット左にシフトされますか????