У нас есть номер n.Пусть это будет 1234, который в двоичном виде равен 10011010010.
(1 << k)
сдвигает биты числа 1. k раз влево.В результате мы получили число, в котором есть все 0, кроме k-й позиции, куда перемещается наш 1. Оператор
&
является побитовым AND.Таким образом, каждый 0 будет равен 0 в нашем исходном n числе на всех позициях, кроме k-й.Будет этот k-й бит из исходного числа в виде 0 & 1 = 0, а 1 & 1 = 1.
В крайнем случае, сдвиг этого результата k - раз вправо заставляет этот самый бит появляться в начале числа,поэтому у нас есть 1 или 0 в зависимости от того, что было на k-й позиции.
Пример вычислений:
(10011010010 & ( 1 << 4)) >> 4
(10011010010 & 00000010000) >> 4
00000010000 >> 4
00000000001
Итак, 4-й бит равен 1.