[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
посчитать 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