当时想都没想,觉得这题很容易,直接写代码如下:
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 }
区别是第二中方法不用判断条件转跳,当大量数据处理是优势就出来了。