#include
using namespace std;
//求二进制中1的个数:对于一个字节(8bit)的变量,要求算法的执行效率尽可能的高
//1,对于二进制,对2求余可得到这一位是0还是1
int count1(int v)
{
int num=0;
while(v)
{
if(v%2==1)
++num;
v=v/2;
}
return num;
}
//2.除2可用右移操作,提高效率,判断一位是否为1可用与来判别
int count2(int v)
{
int num=0;
while(v)
{
num+=(v&1);
v>>=1;
}
return num;
}
//这个数是2的整数次幂来判断
int count3(int v)
{
int num=0;
while(v)
{
v&=(v-1);
++num;
}
return num;
}
//4.分支语句进行判断:效率低
int count4(int v)
{
int num=0;
switch(v)
{
case 0:
num=0;
break;
case 1:
case 2:
case 4:
case 8:
case 16:
case 32:
case 64:
case 128:
num=1;
break;
case 3:
case 6:
case 12:
//还有别的可能
num=2;
break;
}
return num;
}
//5.查表法
int countTable[256]={
0,1,1,2,1,2,
};
int count5(int v)
{
return countTable[v];
}
int main()
{
cout<
名称栏目:求二进制中1的个数的五种方法
转载来于:http://chengdu.cdxwcx.cn/article/gdspjd.html