求二进制中1的个数
2016-01-07 20:31
232 查看
普通 (暴力) 方法:先求int位数,然后循环记录1的个数
int NumberOf1(int n) { int loopnum = 8 * sizeof(int), ans = 0; while(loopnum--){ ans += n&0x1; n = n>>1; } return ans; }
优化版本:
记住一句话:将原码最低位的1的左侧全部求反即为补码。
于是就出现了下面的代码:int NumberOf1(int n) { for(unsigned int r = 0, m = n; ; ++r, m -= m & -m) if(m == 0) return r; }
相关文章推荐
- php闭包函数(匿名函数)
- FileTool.exe 替换 Visual C++ 中的打开和添加到项目功能
- POJ1050 To the Max 题解&代码
- jedis高版本的JedisPoolConfig没有maxActive和maxWait
- php安装xdebug
- 查找组成一个偶数最接近的两个素数
- js刷新页面的方式总结
- 网络编程4http
- 迈步从头越
- Struts2权限控制
- erlang实现A星算法
- iOS开发笔记9:NSUserDefaults存储自定义实体对象
- 实例1——简单风格,导航条、巨幕和行列模式
- linux 内核模块编程之内核符号导出(五)
- js中将变量强制转换为int格式用parseInt()函数
- 对自动化测试的简单认识
- Oracle Minus关键字
- cmd
- 删除字符串中出现次数最少的字符
- Web MVC模式实现