#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;
   return  (t.asInt[LE] >> 20)-0x400+2;
}
int main(int argc, char **argv) {
	int j=1<<12,i=0;
	for (;i<10;++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;
}