先将需要求的数写成二进制数,然后相邻两位想加,重复下去,直到最后剩下一位即为结果。代码如下:
int function(unsigned int n)
{
n = (n & 0x55555555) + ((n>> 1) & 0x55555555); //相邻位相加
n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
n = (n & 0x0f0f0f0f) + ((n>> 4) & 0x0f0f0f0f);
n = (n & 0xff00ff) + ((n>> 8) & 0xff00ff);
n = (n & 0xffff) + ((n>> 16) & 0xffff) ;
return n;
}
如输入参数n=217时候,函数返回5.