Я начал читать «Жемчужины программирования» сегодня и, выполняя это упражнение, натолкнулся на вопрос «Как бы вы реализовали свой собственный битовый вектор?». Когда я посмотрел на решение, оно было таким:
#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)
Не могли бы вы объяснить мне, что здесь происходит?