Bit Mask use no programa abaixo em Programming Pearls
Comecei a ler "Programming Pearls" hoje e, enquanto fazia seu exercício, me deparei com esta pergunta "Como você implementaria seu próprio vetor de bits?". Quando olhei para a solução, era assim:
#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));
Onde estou me confundindo é esta afirmação
1 << (i & MASK)
Alguém poderia me explicar o que está acontecendo aqui?