仕事でintのビット数を数える処理が必要になった。 SSE4あたりではPOPCNTがあるらしいが、そんな新しいCPUとかコンパイラはつかってないのでどんなアルゴリズムがあるか調べてみた。 こんなのがあって int popcnt1(unsigned int val){ unsigned int bits = val; bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555); bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333); bits = (bits & 0x0F0F0F0F) + (bits >> 4 & 0x0F0F0F0F); bits = (bits & 0x00FF00FF) + (bits >> 8 & 0x00FF00FF); bits = (bits & 0x0000