#include <stdio.h>
#include <memory.h>

void printb(unsigned int x);
int bitcount(unsigned x);
int bitcount2(unsigned x);


int main(void){
	int i;
	unsigned int x = 0xFF30;
	
	printb(x);
	printf("%d\n", bitcount(x));
	printf("%d\n", bitcount2(x));
	
	
 	return 0;
}

int bitcount(unsigned x){
	int b;
	
	for(b = 0; x != 0; x >>= 1)
		if(x&1)
			b++;
	return b;
}

int bitcount2(unsigned x){
	int b = 0;
	
	while(x > 0)
		if(x &= (x-1))
			b++;
	return b;
}

void printb(unsigned int x){
	int i;
	int mask = 0x1;
	
	for(i = 15; i >= 0; i--){
		printf("%d", (x >> i) & mask);
		if((i % 4) == 0) putchar(' ');
	}
	putchar('\n');
}