博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求二进制数中1的个数
阅读量:6981 次
发布时间:2019-06-27

本文共 1290 字,大约阅读时间需要 4 分钟。

问题:对于一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数,要求算法的执行效率尽可能高。
1 #include 
2 using namespace std; 3 //最简单的思路,除2有余数 4 int fun1(unsigned int a) 5 { 6 int count; 7 count = 0; 8 while (a) 9 {10 if (a % 2)11 count++;12 a /= 2;13 }14 return count;15 }16 //用位操作更快,但是时间复杂度仍为二进制的长度17 int fun2(unsigned int a)18 {19 int count;20 count = 0;21 while (a)22 {23 //if (a & 1)24 //count++;25 count += a & 1;26 a = a>>1;27 }28 return count;29 }30 //O(2)直接给答案,最快,但是空间复杂度会比较高31 int fun3(unsigned int a)32 {33 int count;34 count = 0;35 int result[20] = {
0, 1, 1, 2,36 1, 2, 2, 3,37 1, 2, 2, 3,38 2, 3, 3, 4};39 while (a)40 {41 count += result[a & 15];42 a = a >> 4;43 }44 return count;45 }46 //这方法想不起来了,时间复杂度跟二进制中1的个数有关,比前二种方法高效,相比第三种方法,没有用到多余的空间47 int fun4(unsigned int a)48 {49 int count;50 count = 0;51 while (a)52 {53 a &= (a - 1);54 count ++;55 }56 return count;57 }58 int main()59 {60 unsigned int a, b;61 a = 11;62 b = 63;63 //测试64 cout<
<

 

转载于:https://www.cnblogs.com/chuanlong/p/3702807.html

你可能感兴趣的文章
《少年派的奇幻漂流》观后感
查看>>
Extjs:添加查看全部按钮
查看>>
UNIX/Linux系统管理技术手册(3)----bash 数组和算术运算
查看>>
LINQ之路19:LINQ to XML之X-DOM更新、和Value属性交互
查看>>
笔记之远程桌面服务(RDS)
查看>>
怎样操作vue.js使用3DES加密
查看>>
js实现点击<li>标签弹出其索引值
查看>>
DIV限制宽度,字符断行,避免变形
查看>>
通过进程ID获得该进程主窗口的句柄
查看>>
快速把web项目部署到weblogic上
查看>>
.Net 文件流 System.IO之Stream
查看>>
Jmeter 笔记
查看>>
一个JS对话框,可以显示其它页面,
查看>>
IDEA ctrl+alt+L 格式化快捷键无效时解决
查看>>
前端小知识
查看>>
子弹实例化的代码
查看>>
URAL 2027 URCAPL, Episode 1 (模拟)
查看>>
hadoop install start-dfs.sh 失败
查看>>
各种小记
查看>>
Java关键字final、static使用总结
查看>>