[an error occurred while processing this directive] [an error occurred while processing this directive]
Если нужно (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Беня 07 июня 2002 г. 13:50
В ответ на: Ответ: может я и неправильно сформулировал вопрос (может надо было так: что такое биты even или odd?), но зачем же тратить свое драгоценное время на половинчатые ответы, да еще и с издевкой ? отправлено Константин Соловьев 07 июня 2002 г. 11:32

посчитать odd, то считают количество единичных битов в байте и если это количество четное, то Odd = 1, иначе Odd = 0 (Odd - дополнение до нечетного количечтва битов).
А Even - это противоположное Odd - ечли количество единичных битов четное, то Even = 0, иначе Even = 1.
Самый тупой метод подсчета "в лоб" :
bit is_odd( unsigned char info) {
unsigned char cnt = 0 ;

if(info & 1) cnt++ ;
if(info & 2) cnt++ ;
if(info & 4) cnt++ ;
if(info & 8) cnt++ ;
if(info & 0x10) cnt++ ;
if(info & 0x20) cnt++ ;
if(info & 0x40) cnt++ ;
if(info & 0x80) cnt++ ;
if( cnt & 1) { // нечетное кол-во единичек
return 0 ;
}
return 1 ;
}

Но этот метод очень длинный и неоптимальный (хотя и самый понятный)- если использовать разные хитрости (например, свойства операции XOR - исключающее ИЛИ), то можно это проделать гораздо быстрее (ну Вам уже приводили примеры).

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru