#include <stdio.h>

char split_lookup[] = {
	0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
};

int bit_count(unsigned char n) {
	return split_lookup[n&0xF] + split_lookup[n>>4];
}

int main(void) {

for (int i = 0 ; i != 256 ; i++) {
    int count = 0;
    for (int p = 0 ; p != 8 ; p++) {
        if (i & (1 << p)) {
            count++;
        }
    }
    if (bit_count(i) != count) {
        printf("Bad: %d\n", i);
    }
}


	return 0;
}
