#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; }
求二进制中1的个数的五种方法
原创
©著作权归作者所有:来自51CTO博客作者小止1995的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:详谈事务的几大特点
下一篇:求一个数阶乘末尾0的个数
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
第五节 二进制安装docker
二进制安装docker
docker linux 开机自启 -
2.1 求二进制数中1的个数
对于一个字节(8 bit)的无符号整形变量,求其二进制表示中“1”的个数,要
时间复杂度 数组 执行效率