int bitcount(unsigned __int64 value)
{
if (!value)
return SOME_DEFAULT_VALUE;
value &= -value;
unsigned int lsb = (unsigned) value | (unsigned) (value >> 32);
return (int)(((((((((((unsigned) (value >> 32) != 0) * 2)
+ ((lsb & 0xffff0000) != 0)) * 2)
+ ((lsb & 0xff00ff00) != 0)) * 2)
+ ((lsb & 0xf0f0f0f0) != 0)) * 2)
+ ((lsb & 0xcccccccc) != 0)) * 2)
+ ((lsb & 0xaaaaaaaa) != 0);
}
int bitcount(unsigned char x)
{
int b;
for(b=0; b<7 && !(x&1); x>>=1) b++;
return b;
}
Reference
https://stackoverflow.com/questions/7812044/finding-trailing-0s-in-a-binary-number