Цифровой массив

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Ruslan M
Сообщения: 1
Зарегистрирован: 09 июл 2013, 04:05

Дан цифровой массив , посчитать сколько двоичных единиц содержит каждое число.
если не затруднит можно весь программный код
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

"Весь программный код" не затруднит, но тогда не будет видно твоего участия. В этом разделе мы помогаем, а не выдаём готовые решения. Ради вас самих, между прочим.

Для того, чтобы посчитать количество единиц в двоичном представлении числа, нужно сделать следующее:

1. Узнать есть ли в конце числа единица и если есть, то увеличить счётчки единиц. Для того, чтобы узнать есть ли в конце единица, нужно наложить на число битовую маску 1. Если число было n, то итоговая конструкция будет иметь вид (n & 1). Её-то и нужно проверять на равенство нулю или единице.
2. Если исходное число не ноль, то сдвинуть его на один бит вправо и перейти на пункт №1. Сдвиг осуществляется через оператор >>. Итоговая конструкция будет иметь вид (n = n >> 1).
3. Если исходное число ноль, то конец цикла.

Этот алгоритм следует применить для каждого элемента "цифрового массива".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Самый лучший (с точки зрения оптимизации) способ узнать количество двоичных единиц в байтовом массиве - это составить таблицу 256х2, в которой каждому байту будет сопоставлено количество единиц. И используя ее быстренько пробежаться по массиву и посчитать сумму. По моим оценкам, это будет эффективно при любом размере массива, даже равному 1. А реализация его на асм ускорит обработку в десятки раз.
It's a long way to the top if you wanna rock'n'roll
Ответить