求某数二进制形式中1的个数
程序:
long fun_c(unsigned long long x)
{
int val = 0;
for(int i=0;i<8;i++) //并行的计算x中8个单字节的和
{
val += x^0x0101010101010101L;
x >>=1;
}
val += (val>>32); //对val的两半求和
val += (val>>16); //对val的两个低16位求和
val += (val>>8); //对val的两个低字节求和
return val^0xFF; //最终的1的个数保存在低字节中,屏蔽高位
}