Вот одна из моих функций, которые я использовал во время моей работы над дипломной работой бакалавра;)
/** Calculates number of bits in unsigned char
* @brief Bit count
* @param input to be checked
* @return int 0-8
*/
int bitCount( unsigned char input)
{
static unsigned char count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
return (int)(
count[ input & 0x0f] +
count[ (input >> 4) & 0x0f]
);
}
Таким образом, общее число для целого числа 4B будет:
int bytes = bitCount( (unsigned char)((number >> 0)&255))
+ bitCount( (unsigned char)((number >> 8)&255))
+ bitCount( (unsigned char)((number >> 16)&255))
+ bitCount( (unsigned char)((number >> 24)&255));
И четность:
return bytes%2;
return bytes&1; // if you preffer
Я всегда хотел повторно использовать эти коды:)
РЕДАКТИРОВАТЬ : Как вы могли заметить, unsigned char
(8b) можно разделитьна 2 части по 4b каждый, что означает 16 значений, которые легко хранить и использовать повторно.Таким образом, вы берете первые 8b из целого числа, делите их на две части.Убедитесь, что они оба находятся в интервале <0,15>
, и просто получите счетчик битов.Повторите:)