Позволяет n
быть 4
, что в двоичном виде представляется как:
00000000 00000000 00000000 00000100
(n&1)
по битам и n
с 1
.
1
имеет двоичное представление:
00000000 00000000 00000000 00000001
Результат побитового обращения: 0
:
00000000 00000000 00000000 00000100 = n
00000000 00000000 00000000 00000001 = 1
------------------------------------
00000000 00000000 00000000 00000000 = 0
так что условие while верно.
Эффективно (n&1)
был использован для извлечения младшего значащего бита n
.
В цикле while вы сдвигаете вправо (>>
) n
на 1
. Сдвиг вправо числа на k
аналогичен делению числа на 2^k
.
n
, который теперь 00000000 00000000 00000000 00000100
при смещении вправо становится
00000000 00000000 00000000 00000010
, что 2
.
Затем мы снова извлекаем младший значащий бит из n
, который равен 0
, и снова сдвига вправо, чтобы получить 00000000 00000000 00000000 0000001
, что составляет 1
.
Затем мы снова извлекаем LSB из n, который теперь равен 1
и цикл прерывается.
Таким образом, вы продолжаете делить свой номер n
на 2
, пока он не станет нечетным , поскольку для нечетных чисел установлен LSB.
Также обратите внимание, что если n
равно 0
, для начала вы попадете в бесконечный цикл, потому что независимо от того, сколько раз вы поделите 0
на 2
, вы не получите нечетное число.