uint8_t bit_count_uint8(uint8_t byte)
{
byte -= (uint8_t)(byte >> 1u) & 0x55u;
byte = (byte & 0x33u) + ((uint8_t)(byte >> 2u) & 0x33u);
byte += (uint8_t)(byte >> 4u);
return (byte & 0x0Fu);
}
uint8_t utils_bit_count_uint16(uint16_t word)
{
uint8_t count;
word -= (uint16_t)(word >> 1u) & 0x5555u;
word = (word & 0x3333u) + ((uint16_t)(word >> 2u) & 0x3333u);
word += (uint16_t)(word >> 4u);
count = (uint8_t)(((word & 0x0F0Fu) * 0x0101u) >> 8u);
return (count);
}
uint8_t bit_count_uint32(uint32_t word)
{
uint8_t count;
word -= (uint32_t)(word >> 1u) & 0x55555555u;
word = (word & 0x33333333u) + ((uint32_t)(word >> 2u) & 0x33333333u);
word += (uint32_t)(word >> 4u);
count = (uint8_t)(((word & 0x0F0F0F0Fu) * 0x01010101u) >> 24u);
return (count);
}
uint8_t bit_count_uint64(uint64_t word)
{
return bit_count_uint32(word >> 32) + bit_count_uint32(word & 0xFFFFFFFF);
}