typedef short uint2_t;
typedef int uint4_t;
uint32_t popCount1(uint2_t u)
{
u = ((u&0x1) + ((u>>1)&0x1));
return u;
}
uint32_t popCount2(uint4_t u)
{
u = ((u&0x5) + ((u>>1)&0x5));
u = ((u&0x3) + (u>>2));
return u;
}
uint32_t popCount3(uint8_t u)
{
u = ((u&0x55) + ((u>>1)&0x55));
u = ((u&0x33) + ((u>>2)&0x33));
u = ((u&0x0f) + (u>>4));
return u;
}
uint32_t popCount4(uint16_t u)
{
u = ((u&0x5555) + ((u>>1)&0x5555));
u = ((u&0x3333) + ((u>>2)&0x3333));
u = ((u&0x0f0f) + ((u>>4)&0x0f0f));
u = ((u&0x00ff) + (u>>8));
return u;
}
uint32_t popCount(uint32_t u)
{
cout << "before popCount , mByte : " << u << endl;
u = ((u&0x55555555) + ((u>>1)&0x55555555));
u = ((u&0x33333333) + ((u>>2)&0x33333333));
u = ((u&0x0f0f0f0f) + ((u>>4)&0x0f0f0f0f));
u = ((u&0x00ff00ff) + ((u>>8)&0x00ff00ff));
u = ( u&0x0000ffff) + (u>>16);
cout << "after popCount , mByte : " << u << endl;
return u;
}