Как посчитать единицы в байте?
На выходе: ah - число единичных бит в байте
mov ecx,8
xor ah,ah
setnc
@@startloop: shr al,1
jnc @@contloop
inc ah
@@contloop: dec ecx
jnz @@startloop
бред, для байта даже табличка будет существенно быстрее.
Как правильно мне тут подсказывают, все это --- сплошные выебоны. Правильный вариант: табличка значений.
А табличку будешь вручную строить?
![](/images/icons/smile.gif)
const unsigned char BitsSetTable256[] =
{
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
};
Эту задачку дали мне на собеседовании. Я там начал было биты суммировать, но меня остановили и сказали, что все проще...
Кстати, по ресурсоемкости, думаю, вариант биты просуммировать будет не хуже табличного.
если раскрутить цикл то будет возможно лучше,
но всё можно сделать за 3 операции, без условных переходов и таблиц.
Кстати, по ресурсоемкости, думаю, вариант биты просуммировать будет не хуже табличного.думаешь? — проверь!
![](/images/graemlins/wink.gif)
По твоей ссылке я так понял предлагается табличный метод. Или ты его и имеешь в виду?
есть ещё мелкие улучшения, подробно написано в Уоррене, алгоритмические трюки для программистов
почитай внимательно, там есть и вычисление за 3 операции * & %
Г.Уоррен, Алгоритмические трюки для программистов
Оставить комментарий
Alexei70
На любом языке. Главное - минимум операции процессора.Уже голову сломал думать. Только дубовые решение в голову приходят. Знаю только, что существует некое короткое решение, использующее возможности, входящие в любой язык программирования.