Использование битовой маски в приведенной ниже программе из Programming Pearls

Я начал читать «Жемчужины программирования» сегодня и, выполняя это упражнение, натолкнулся на вопрос «Как бы вы реализовали свой собственный битовый вектор?». Когда я посмотрел на решение, оно было таким:

#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)

Не могли бы вы объяснить мне, что здесь происходит?

7
задан test123 28 August 2011 в 02:56
поделиться