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

来源:互联网 发布:淘宝 修改差评 编辑:程序博客网 时间:2024/05/16 10:18

用位运算求给定整数的二进制表示中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'>

 

原创粉丝点击