#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;
}