ループを含まず (ビット操作のみ)、大きな定数を使用しない、ワード内のビットをカウントするルーチンを作成する必要があります。
int x = 0xFFFFFFFF;
x += (~((x >> 1) & 0x55555555)+1);
x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
x = (((x >> 4) + x) & 0x0F0F0F0F);
x += (x >> 8);
x += (x >> 16);
return(x & 0x0000003F);
これはビットいじりハックで見つけましたが、使用できる最大の定数は 0xFF です...それ以外の方法でこれを行う方法がわかりません。
ありがとうございます。