#include <stdio.h>
unsigned int bits0(unsigned int num) {
int count = 0; while(num) num >>=1, ++count; return count;
}
int bits1(int x) {
int y=0, n=1, c=8; // поставить sizeof/2 для универсальности
do {
y = x >> c;
if (y != 0) {n += c; x = y;}
c >>= 1;
} while (c != 0);
return n;
}
int main(int argc, char **argv) {
unsigned int j=1<<1,i=0;
for (;i<15;++i,j<<=1){
unsigned int d = j|1;
printf("%lu==%lu\n", bits0
(d
), bits1
(d
)); }
for (i=1;i<65536;++i)
if(bits0(i)!=bits1(i))
printf("ERROR i=%d %lu!=%lu\n", bits0
(i
), bits1
(i
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCBpbnQgYml0czAodW5zaWduZWQgaW50IG51bSkgewoJaW50IGNvdW50ID0gMDsgd2hpbGUobnVtKSBudW0gPj49MSwgKytjb3VudDsgcmV0dXJuIGNvdW50OwkKfQppbnQgYml0czEoaW50IHgpIHsKICAgaW50IHk9MCwgbj0xLCAgYz04OyAvLyDQv9C+0YHRgtCw0LLQuNGC0Ywgc2l6ZW9mLzIg0LTQu9GPINGD0L3QuNCy0LXRgNGB0LDQu9GM0L3QvtGB0YLQuAogICBkbyB7CiAgICAgIHkgPSB4ID4+IGM7IAogICAgICBpZiAoeSAhPSAwKSB7biArPSBjOyB4ID0geTt9CiAgICAgIGMgPj49IDE7CiAgIH0gd2hpbGUgKGMgIT0gMCk7CiAgIHJldHVybiBuOwp9CmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewoJdW5zaWduZWQgaW50IGo9MTw8MSxpPTA7Cglmb3IgKDtpPDE1OysraSxqPDw9MSl7CgkgIHVuc2lnbmVkIGludCBkID0ganwxOwoJICBwcmludGYoIiVsdT09JWx1XG4iLCBiaXRzMChkKSwgYml0czEoZCkpOwoJfQoJZm9yIChpPTE7aTw2NTUzNjsrK2kpCgkJaWYoYml0czAoaSkhPWJpdHMxKGkpKQoJICAJCXByaW50ZigiRVJST1IgaT0lZCAlbHUhPSVsdVxuIiwgYml0czAoaSksIGJpdHMxKGkpKTsKCQkKICByZXR1cm4gMDsKfQ==