概述
1. 一种比较好理解的方法是:
int bitcount(d unsigned x)
{
int b;
for (b = 0; x != 0; x >>= 1)
if (x & 01)
b++;
return b;
}
该方法每次清除x的一位,并判断该位是否为1,若是,则b加1,否则不加,直到x变成0。
2.另一种效率比较高的算法是:
int bitcount(d unsigned x)
{
int b;
for (b = 0; x! = 0; x &= (x-1))
b++;
return b;
}
有这样一个规则:在采用二进制补码的系统中,x &= (x-1) 能将x中最右边为1的比特位去掉(即置为0)。
原因简单说一下:(设X最右边为1的为第N位(从左往右数))
x是偶数,则x的N-1位为0,而x-1的N-1位则为1,N位则为0,则x的N位、N-1位与(x-1)的N位、N-1位相与,则成功消去x中最右边为1的比特位去掉。
x是奇数,则x的N位为1,而x-1的N位则为0,别的位都相同。则x的N位与(x-1)的N位相与,则成功消去x中最右边为1的比特位去掉。
最后
以上就是碧蓝大侠为你收集整理的计算一个二进制数的1的位数bitcount的全部内容,希望文章能够帮你解决计算一个二进制数的1的位数bitcount所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复