#include<iostream>
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<<count1(3)<<endl;
cout<<count2(15)<<endl;
cout<<count3(4)<<endl;
cout<<count4(128)<<endl;
cout<<count5(0)<<endl;
return 0;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。