您的位置:首页 > 编程语言 > C语言/C++

c语言---一个数x中值为1的位数(3个版本)

2008-10-05 14:17 183 查看

/*版一*/
unsigned int bitcount(unsigned int x)
{
int b;
for(b=0;x != 0;x >>= 1)
{
if(x&01)
b++;
}
return b;
}


/*版二*/
unsigned int bitcount(unsigned int x)
{
int b;
for(b=0;x != 0;)
{
x &= (x-1); /* 这里的做用是每次都会在原的的数的基础上去掉一个1,贼酷 */
b++;
}
return b;
}


/*版三*/
unsigned int bitcount(register unsigned int x)
{
x -= ((x > > 1) & 0x55555555);
x = (((x > > 2) & 0x33333333) + (x & 0x33333333));
x = (((x > > 4) + x) & 0x0f0f0f0f);
x += (x > > 8);
x += (x > > 16);
return(x & 0x0000003f);
}


/*第3个版本的清晰版本*/
unsigned int bitcount(register unsigned int x)
{
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return(x & 0x0000003f);
}
//进一步解释:看图吧,已经山穷水尽啦,如果还不明白请打120

/*其实这个算法很简单,就是把这个数中的所有的1都加起来就可以了*/





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐