| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Количество бит установленных в 1? |
| Автор: Lamak 2.10.2007, 13:40 | ||
| Написать функцию которая возвращает кол-во бит установленных в 1(например в переменной типа int). Я предложил следующее решение:
скорость этого алгоритма пропорциональна 32 Вопрос: Как увеличить скорость алгоритма? |
| Автор: Fazil6 2.10.2007, 13:51 | ||
|
| Автор: Lamak 2.10.2007, 13:54 |
| Fazil6, скорость твоего алгоритма тоже пропорциональна 32 ты просто избавился от переменной i Добавлено через 1 минуту и 55 секунд хотя согласен на некоторых примерах он быстрее |
| Автор: Fazil6 2.10.2007, 13:58 |
такой алгоритм не требует обязательных 32-х итераций Добавлено через 7 минут и 17 секунд http://infolab.stanford.edu/~manku/bitcount/bitcount.html |
| Автор: Lamak 2.10.2007, 14:10 |
| Fazil6, + да я уже понял! спасибо за оперативный ответ! Добавлено через 12 минут и 54 секунды спасибо за ссылку! |
| Автор: xvr 2.10.2007, 14:24 | ||||||||
2 варианта:
Второй вариант:
|
| Автор: Fazil6 2.10.2007, 14:26 |
| самый быстрый вариант - использовать предподсчет. Есть в ссылке выше |
| Автор: MAKCim 2.10.2007, 22:58 | ||
|
| Автор: _Michael 10.10.2007, 17:58 |
| MAKCim, а можеш немного прокомментировать твой ответ? Как оно работает? |
| Автор: MAKCim 10.10.2007, 18:11 | ||
| _Michael, сдвигаем искомое число на 1 бит вправо флаг CF принимает значение сдвинутого бита инструкцией
увеличиваем (или не изменяем (в зависимости от CF)) общее количество единичных битов все это в цикле из 32-х итераций |
| Автор: _Michael 10.10.2007, 19:15 |
| Спасибо, все равно темний лес для меня. Как я понимаю %2 ето типа второй парметр или как? Но ето уже надо синтаксис смотреть как в сишке асм пользовать |
| Автор: ksili 15.10.2007, 10:06 |
| В книге Генри Уоррена "Алгоритмические трюки для программистов" вроде есть функция для вычисления этого без всяких ветвлений (то есть нету if, while, else, ну и соответственно jnz). xvr, вроде её и привёл во втором варианте, но возможно там есть и другие варианты |