Tuesday, July 28, 2009

Подсчет количества битов в байте или слове

Циклически сбрасывается крайний справа единичный бит исследуемого байта,
до тех пор, пока байт не станет равным 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) со знаком минус.

0 коммент.:

Post a Comment

Powered by Blogger.