register int i, v=0b10101111;
unsigned int n=0;
for(i=1;!(i&512);i<<=1) n+=(i&v)?1:0;
printf("%d\n",n);

まさかこれの出力結果分からん奴おらんやんな?
C言語の基礎の基礎やが