Циклически сбрасывается крайний справа единичный бит исследуемого байта,
до тех пор, пока байт не станет равным 0.
Эффективность: 2 + 5*pop(x) команд, подходит для малозаполненных байтов.
private static int pop(byte x)
{
int n = 0;
while (x != 0)
{
n += 1;
x = (byte) (x & (x - 1));
}
return n;
}
Другой способ:
В слове циклически устанавливается крайний справа нулевой бит ( x = x | (x + 1)) до тех пор, пока во всех разрядах слова не оказываются единицы (то есть слово = -1).
После этого возвращается число 32 - n.
Третий способ:
Вычисляется сумма всех 32 битных слов, полученных в результате циклического сдвига слова влево на один разряд. Итоговая сумма равна значению pop(x) со знаком минус.
Tuesday, July 28, 2009
Подсчет количества битов в байте или слове
Subscribe to:
Post Comments (Atom)
Powered by Blogger.
0 коммент.:
Post a Comment