Bit Mask uso en el programa a continuación de Programming Pearls
Empecé a leer "Programming Pearls" hoy y mientras hacía su ejercicio me encontré con esta pregunta "¿Cómo implementaría su propio vector de bits?". Cuando miré la solución fue así:
#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));
Donde me estoy confundiendo es esta declaración
1 << (i & MASK)
¿Podría alguien explicarme qué está pasando aquí?