Обратите внимание, что MASK
установлено таким образом, что для него установлены самые младшие SHIFT
биты, где SHIFT
- это точно логарифм по основанию 2 BITSPERWORD
.
Поэтому (i & MASK)
выберет5 самых младших битов i
, что равносильно получению остатка после деления на 32 (просто посмотрите, как, например, взятие двух младших цифр десятичного числа дает остаток после деления на 100).Это дает номер бита в интересующем нас слове.
1 << (i & MASK))
(который, кстати, является выражением , а не оператор ) теперь создает значение, в котором установлен именно тот бит, который нас интересует.Слияние этого значения в слово памяти с помощью |=
установит желаемый бит вектора битов.