关闭

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

标签: C++二进制表示1的位数
246人阅读 评论(0) 收藏 举报
分类:
//巧妙计算一个数二进制表示法中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;
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9745次
    • 积分:510
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条