今日から「ProgrammingPearls」を読み始めましたが、その演習をしているときに、「独自のビットベクトルをどのように実装しますか?」という質問に出くわしました。私が解決策を見たとき、それは次のようでした:
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void set(int i) { a[i >> SHIFT] |= (1 << (i & MASK));
私が混乱しているのはこの声明です
1 << (i & MASK)
誰かがここで何が起こっているのか説明してもらえますか?