Не знаю насчет К155ИМ1, не пробовал.
Если требуется подсчитать количество единиц, то складывать каким-либо образом какие-то числа, как кое-кто тут предлагал, нельзя. Ибо числа будут просто арифметически сложены. Нужен именно подсчет единиц, которые в исходном числе могут располагаться в любых разрядах. И это нужно учитывать. И "плясать" нужно не от порога, а от подсчета лог.единиц в числе!
Пример реализации через преобразователь кода - во вложении TEST.zip (файл проекта Протеус).
Для простоты рассмотрен подсчет единиц в 8-разрядном числе. Реализовано на простых логических двух- и трехвходовых элементах AND, OR, XOR. Использовано 36 лог.элементов. Может быть, не оптимально с точки зрения количества элементов, но я сильно то не заморачивался.
Как видно, за основу взяты полусумматоры. Суммируются разряды попарно, причем для простоты 8-разрядное число разбил на два 4-разрядных - два одинаковых блока, затем эти два блока объединяются и на выходе получается 4-битное двоичное число, которое равно количеству единиц в исходном 8-битном числе. По сути - это преобразователь кода, а не сумматор.
24-разрядное число обрабатывается наращиванием разрядности. Скорее всего, удобней будет составлять из блоков по 4 разряда - сам не пробовал, ибо жесть. Количество элементов для 24-битного числа будет внушительным. Тут лучше уже будет выполнять на программируемых логических матрицах.
Если нужен какой-то порог, то уже на выходе поставить обычный компаратор двоичного кода.
А еще лучше применить для решения задачи какой-нибудь контроллер. Да хотя бы PIC. Больших вычислительных мощностей не требуется. И даже есть 2 варианта. Либо подороже - использовать большой 4-х портовый - 3 порта для параллельного ввода 24-битного слова и 1 порт - для вывода 5-битного результата, что-то типа PIC16F871. Либо подешевле - какой-нибудь простенький с USART-ом для последовательного синхронного ввода 24-битного слова, и вывод так же через USART, либо на обычный порт параллельно. Только придется сделать скоростной сдвиговый регистр на отдельных микросхемах. Или еще более удешевить, использовав предельно простой контроллер начальныго семейства, эмулировав программно работу USART-а.
Можно даже вместо кварца поставить RC-цепь или внутренний осциллятор, если он есть.
Подсчет единиц в микроконтроллере PIC реализуется предельно просто.
После прочтения портов (или приема по USART) проверяем каждый бит на равенство единице, если бит =1, то инркементируем регистр количества единиц. Ну и выдаем результат на выход.
Пример на первом попавшемся контроллере PIC16F871 с параллельным вводом 24 бит - во вложении PIC.zip
Код - простейший. Задача выполнена сдвигом регистров вправо через бит переноса C и проверкой этого бита.
Если через USART, тогда впереди добавить блок приема числа.
Как видишь, контроллером задача решается оч-ч-чень компактно, быстро, и даже дешевле. В контроллере как раз можно быстренько сделать и сравнение с заданным порогом, и все остальное.
Да, а ведь эту задачу можно решить аналогичным образом и на микросхемах. То же самое -трехбайтный сдвиговый параллельно-последовательный регистр, на выходе - детектор лог."1" - например лог.элемент AND и обычный двоичный счетчик, инкрементируемый при поступлении лог."1" на счетный вход. Ну и цепь управления всем этим преобразованием в виде счетчика до 24 и установки разрешений для загрузки/сдвига.
И ваапсче. Меня всегда удивляли некоторые челы, пространно рассуждающие про "оптимальность задания и базы и цель научить студента более изящно строить камунизьмь"
Я ваще валяюсь, блин. Ну зачем писать чепуху, ну не сообразил по теме - ну промолчи, ну не нада вот этава вот этава, блин, ну народная мудрость ж - "молчание - золото", "промолчишь - за умного сойдешь".
А то так и получается, что мол, 21-битный результат подсчета количества единиц в 24 битном числе! Эт ваще с какой горы 21 бит то взялся, как это посчитал то? Это 2 миллиона единиц!
Какая такая компрессия??? Вы че, господа, какая нах компрессия? Че за бред, ёпм! Зато как многозначительно то...