ちょっとわけあってpopcountを調べてた。 以前から、ビットを数える・探すアルゴリズムを参考に int numofbits5(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); } とかやってたわけです。この計算の意味は、 1行目で、2ビットずつを足しこみ2ビット単位で1