#include <stdio.h>
// Count the number of zeros in a specific amount of bits starting at a specific offset
// value is the original value
// offset is the offset in bits
// bits is the number of bits
unsigned int count_zeros(unsigned int value, unsigned int offset, unsigned int bits)
{
// Get the bits we're interested in the rightmost position
value >>= offset;
unsigned int counter = 0; // Zero-counter
for (unsigned int i = 0; i < bits; ++i)
{
if ((value & (1 << i)) == 0)
{
++counter; // Bit is a zero
}
}
return counter;
}
int main(void)
{
printf("Result of count_zeros(0xa5, 2, 4) = %u\n", count_zeros
(0xa5, 2, 4)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBDb3VudCB0aGUgbnVtYmVyIG9mIHplcm9zIGluIGEgc3BlY2lmaWMgYW1vdW50IG9mIGJpdHMgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyBvZmZzZXQKLy8gdmFsdWUgaXMgdGhlIG9yaWdpbmFsIHZhbHVlCi8vIG9mZnNldCBpcyB0aGUgb2Zmc2V0IGluIGJpdHMKLy8gYml0cyBpcyB0aGUgbnVtYmVyIG9mIGJpdHMKdW5zaWduZWQgaW50IGNvdW50X3plcm9zKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGJpdHMpCnsKICAgIC8vIEdldCB0aGUgYml0cyB3ZSdyZSBpbnRlcmVzdGVkIGluIHRoZSByaWdodG1vc3QgcG9zaXRpb24KICAgIHZhbHVlID4+PSBvZmZzZXQ7CgogICAgdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOyAgLy8gWmVyby1jb3VudGVyCiAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpdHM7ICsraSkKICAgIHsKICAgICAgICBpZiAoKHZhbHVlICYgKDEgPDwgaSkpID09IDApCiAgICAgICAgewogICAgICAgICAgICArK2NvdW50ZXI7ICAvLyBCaXQgaXMgYSB6ZXJvCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBjb3VudGVyOwp9CgppbnQgbWFpbih2b2lkKQp7CglwcmludGYoIlJlc3VsdCBvZiBjb3VudF96ZXJvcygweGE1LCAyLCA0KSA9ICV1XG4iLCBjb3VudF96ZXJvcygweGE1LCAyLCA0KSk7Cn0K