巧妙计算一个数二进制表示法中1的位数
//巧妙计算一个数二进制表示法中1的位数。
int fun(unsigned int n)
{
	n=(n&0x55555555)+((n>>1)&0x55555555);
	n=(n&0x33333333)+((n>>2)&0x33333333);
	n=(n&0x0f0f0f0f)+((n>>4)&0x0f0f0f0f);
	n=(n&0x00ff00ff)+((n>>8)&0x00ff00ff);
	n=(n&0x0000ffff)+((n>>16)&0x0000ffff);
	return n;
}

以217(11011001)为例,有图有真相,下面的图足以说明一切了。217的二进制表示中有5个1 :



//另一种做法
int fun(unsigned int n)
{
	int val=0;
	int i;
	for(i=0;i<8;i++)
	{
	val+=x&0x01010101;
	x>>=1;
	}
	val+=(val>>16);
	val+=(val>>8);
	return val&0xff;
}




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZeroCBoy/article/details/51554994
个人分类: 算法和数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

巧妙计算一个数二进制表示法中1的位数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭