To Dizel: вычисление четности (нечетности). Это щчень просто.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
Bill 17 марта 2005 г. 22:12
|
|
|
|
Пусть бит четности вычисляется как
pb = b7 ^ b6 ^ b5 ^ b4 6b3 ^ b2 ^ b1 ^ b0
Дальнейшие вычисления основаны на свойств коммутативности и дистрибутивности функции "Исключающее ИЛИ". С учетом этих свойств можно написать
pb = (b7 ^ b3) ^ (b6 ^ b2) ^ (b5 ^ b1) ^ (b4 ^ b0)
Обозначим результат вычиления выражений в скобках (бит) как ci и получим
pb = c3 ^ c2 ^ c1 ^ c0 = (c3 ^ c2) ^ (c1 ^ c0)
Снова обозначим результат вычисления в скобках как di, тогда получим
pb = d1 ^ d0
Отсюда видно практическая реализация данного вычисления. Так первый промежуточный результат получается при вычислении функции ^ исходного байта и исходного байта с измененным положением тетрад. Второй промежуточный результат вычисляет как функцтя ^ первого промежуточного результата и этого же результата сдвинутого вправо на 1 разряд. Аналогично и для вычисления конечного результата, который формируется в младшем разряде байта.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: Спасибо, Bill. — Dizel (18.03.2005 11:24, 224 байт)
- См. Генри Уоррен 'Алгоритмические трюки для программистов', гл.5, п.5.1. 'Подсчет единичных битов', стр.75-83. — Палыч (18.03.2005 10:36, пустое)
- только первый раз следует сдвинуть НА 2 бита, а второй на 1 ... :-)) — Kuka (18.03.2005 09:30, пустое)
- кстати — DSN (17.03.2005 22:49, пустое, ссылка)
- А нельзя ли уменьшить количество итераций? Сначала полубайты проXORить. Потом у результата полу-полубайты. И еще раз уже два бита. — rezident (17.03.2005 22:44, пустое)
- сам придумал ? Неплохо — DASM (17.03.2005 22:25, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru