2016-09-27 2 views
-6

Я ищу способ подсчета числа бит-переходов в неподписанном int.как подсчитать количество бит-переходов в unsigned int с java

Если INT содержит: 0000000000000000000001010

Количество переходов: 4

Если INT содержит: +00000000000000000000001001

Количество переходов: 3

+0

Какой способ вы используете? В какое время мы конкурируем? – Kayaman

+0

Я только хочу знать дорогу @Kayaman –

+1

Это похоже на домашнюю работу. Если вы можете сделать это на C, вы сможете легко понять это на Java. – mttdbrd

ответ

2

Прямой подход к эта проблема заключается в подсчете количества мест, где бит в позиции i отличается от бит в позиции i+1. Это может быть сделано с помощью XOR-инга число с собой после того, как один сдвиг вправо с расширением знака:

Integer.bitCount(n^(n >> 1)) 

XOR оператор ^ поместит те, во всех местах, где биты в последовательных позициях, отличных друг от друга. Integer.bitCount выполнит задачу, подсчитав количество единиц.

Расширение знака гарантирует отсутствие «фантомного» перехода от наиболее значимого бита к нулю, в случае, когда n отрицательный.

Demo.

Смежные вопросы