求二进制中1的个数

来源:互联网 发布:杭州软件信息技术开发 编辑:程序博客网 时间:2024/06/05 07:53

微笑题目描述

对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能的高。

解法一:

      除以一个2,原来的数字将减少一个0,如果除的过程中有余,那么就表示当前位置有一个1.

代码如下:

int Count(int v)
{
int num=0;
while (v)
{
      if (v%2==1)
         num++;
 v=v/2;
}
return num;
}
解法二:
int Count(int v)
{
int num=0;
while (v)
{
num+=v&0X01;
v>>=1;


}
return num;
}
复杂度为O(log2v),log2v为二进制的位数。
解法三:
只考虑有1的情况
int Count(int v)
{
int num=0;
while (v)
{
v&=(v-1);
num++;
}
return num;
}
时间复杂度为O(M),M是v中1的个数。


0 0
原创粉丝点击