Страница 1 из 1
Цифровой массив
Добавлено: 09 июл 2013, 04:09
Ruslan M
Дан цифровой массив , посчитать сколько двоичных единиц содержит каждое число.
если не затруднит можно весь программный код
Re: Цифровой массив
Добавлено: 11 июл 2013, 14:30
Romeo
"Весь программный код" не затруднит, но тогда не будет видно твоего участия. В этом разделе мы помогаем, а не выдаём готовые решения. Ради вас самих, между прочим.
Для того, чтобы посчитать количество единиц в двоичном представлении числа, нужно сделать следующее:
1. Узнать есть ли в конце числа единица и если есть, то увеличить счётчки единиц. Для того, чтобы узнать есть ли в конце единица, нужно наложить на число битовую маску 1. Если число было n, то итоговая конструкция будет иметь вид (n & 1). Её-то и нужно проверять на равенство нулю или единице.
2. Если исходное число не ноль, то сдвинуть его на один бит вправо и перейти на пункт №1. Сдвиг осуществляется через оператор >>. Итоговая конструкция будет иметь вид (n = n >> 1).
3. Если исходное число ноль, то конец цикла.
Этот алгоритм следует применить для каждого элемента "цифрового массива".
Re: Цифровой массив
Добавлено: 12 июл 2013, 10:55
somewhere
Самый лучший (с точки зрения оптимизации) способ узнать количество двоичных единиц в байтовом массиве - это составить таблицу 256х2, в которой каждому байту будет сопоставлено количество единиц. И используя ее быстренько пробежаться по массиву и посчитать сумму. По моим оценкам, это будет эффективно при любом размере массива, даже равному 1. А реализация его на асм ускорит обработку в десятки раз.