#include <stdio.h>

unsigned int bits0(unsigned int num) {
	int count = 0; while(num) num >>=1, ++count; return count;	
}
#define LE 1
unsigned int bits1(unsigned int num) {
   union {unsigned int asInt[2];double asDouble;} t;
   t.asDouble = (double)num;
   int n = 0x41E - (t.asInt[LE] >> 20);
   return 32- (n & 31) + (n >> 9);
}
int main(int argc, char **argv) {
	int j=2,i=0;
	for (;i<25;++i,j<<=1){
	  unsigned int d = j|1;
	  printf("%lu==%lu\n", bits0(d), bits1(d));
	}
  return 0;
}