Потому что если n
— это позиция в слове, в байтах , то 8*n
— это та же позиция в битах . А n<<3
равно8*n
(2 3 = 8 ).
С n=1
n<<3
равно 8
, а (x >> (n << 3)) & 0xff
переместит второй младший байт в нижнюю позицию и маскирует остальную часть слова. (Разумеется, байты будут нумероваться, начиная с нуля.)
(Я предполагаю, что байты состоят из 8 бит, так как я думаю, что это наиболее распространенный случай, по крайней мере, в настоящее время.)