Прямой подход к эта проблема заключается в подсчете количества мест, где бит в позиции i
отличается от бит в позиции i+1
. Это может быть сделано с помощью XOR-инга число с собой после того, как один сдвиг вправо с расширением знака:
Integer.bitCount(n^(n >> 1))
XOR оператор ^
поместит те, во всех местах, где биты в последовательных позициях, отличных друг от друга. Integer.bitCount
выполнит задачу, подсчитав количество единиц.
Расширение знака гарантирует отсутствие «фантомного» перехода от наиболее значимого бита к нулю, в случае, когда n
отрицательный.
Demo.
Какой способ вы используете? В какое время мы конкурируем? – Kayaman
Я только хочу знать дорогу @Kayaman –
Это похоже на домашнюю работу. Если вы можете сделать это на C, вы сможете легко понять это на Java. – mttdbrd