当时想都没想,觉得这题很容易,直接写代码如下:

unsigned int FindOneInNumber_01(unsigned int x)
{
    unsigned int n;
    for(n=0; x; x >>= 1)
        if (x & 1) n++;
    return n;
}

回来上坛子里一看,觉得这方法不是太好,有高手的写法:

1 unsigned int FindOneInNumber_02(unsigned int x)
2 {
3     unsigned int n;
4     for(n=0; x; n++)
5         x &= x-1;
6     return n;
7 }

区别是第二中方法不用判断条件转跳,当大量数据处理是优势就出来了。


来源: https://www.cnblogs.com/sankye/articles/1686814.html