您的位置:首页 > 其它

用位运算求给定整数的二进制表示中1的个数

2013-07-01 00:25 337 查看
用位运算求给定整数的二进制表示中1的个数

考虑到n-1会把n的二进制表示中最低位的1置0并把其后的所有0置1,同时不改变此位置前的所有位,那么n&(n-1)即可消除这个最低位的1。这样便有了比顺序枚举所有位更快的算法:循环消除最低位的1,循环次数即所求1的个数。此算法的时间复杂度为O(n的二进制表示中的1的个数),最坏情况下的复杂度O(n的二进制表示的总位数)。

//计算n的二进制表示中1的个数

int count1(unsignedint n)

{

intr = 0;

while(n)

{

n &= n-1; //每运算一次消去最后一个1

r++;

}

returnr;

}

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