Как работает такое решение с побитовыми операторами?
>> - оператор бинарного сдвига вправо, то есть число 13 в бинарном виде 1101, при сдвиге вправо на один бит будет число 6 (110)
& - бинарное И, каждый бит числа слева сопоставляется с соответствующим битом числа справа, например 13 & 6 (1101 & 0110) будет 4 (0100)
Теперь разберем конкретный пример, начальные условия
n = 1234 (10011010010)
c = 0
Условие цикла for - значение переменной n, так как переменная числовая, цикл будет выполнятся пока n не станет равной 0
Первая итерация:
n & 1 - 0 (так как 1 - это 00000000001), все биты при & дают 0
с += 0 - c будет 0
n >>= 1 - n будет 617 (1001101001)
Вторая итерация:
n & 1 - 617 & 1 - 1
c += 1 - c будет 1
n >>= 1 - n будет 308 (100110100)
Ну и так далее, пока на последней итерации, перед которой в n останется 1 и операция n >>= 1 сделает его 0, что и послужит завершением цикла, а в c на тот момент будет количество еденичных битов начального числа
Давайте разберемся, что такое бит вы знаете? Надеюсь да. Так вот, все в компе состоит из этих байтиков и т.д.
В данном случае так выходит:14 1110
&9 1001
=8 1000