>>208
立っているビットを想定していました。
言葉足らずですみません。

で、for文を使った一般的な方法だけれど、
それをトリッキーに書いてみてはどうでしょう。
有名なのに↓があります。
int numofbits(long bits)
{
  bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
  bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
  bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
  bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
  return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
}
これは自分で考えるとすると結構ハードだと思うのですが。
かくいう俺も独自で思いついたのはありません。