整数中1 的个数
2016-07-28 15:30
246 查看
问题
求整数中1的个数
原理
一个数n若不为0,从数的最低为到最高位,第一个为1 的位记为 i ,则减去 1 之后,改为变为0,i 右边的所有位都变为1,因此 n & (n-1)可得 n中剩余比 i 更高位序 的 部分 ,循环此操作,则可得 1 的计数。
代码
Output
总结
若是负数,则输出补码中包含 1 的个数。当然还有其他的方法: 初始化 1 ,让 1 依次循环左移,依次与 n 进行按位与操作,可得结果。
求整数中1的个数
原理
一个数n若不为0,从数的最低为到最高位,第一个为1 的位记为 i ,则减去 1 之后,改为变为0,i 右边的所有位都变为1,因此 n & (n-1)可得 n中剩余比 i 更高位序 的 部分 ,循环此操作,则可得 1 的计数。
代码
#include <iostream> using namespace std; int main() { int n,s,counter = 0; cout << " Please input a Integer : " ; cin >> n; s = n; while( n ) { counter ++; n = n & (n - 1); } cout << " Number of One in " << s << " is " << counter << endl; return 0; }
Output
Please input a Integer : 20 Number of One in 20 is 2
总结
若是负数,则输出补码中包含 1 的个数。当然还有其他的方法: 初始化 1 ,让 1 依次循环左移,依次与 n 进行按位与操作,可得结果。
相关文章推荐
- python map函数
- 【C++学习之路】解决:无法查找或打开 PDB 文件
- 求字符串中最长无重复字符的子串
- Hbase基本概念
- Tomcat6 启动时 Cannot assign requested address: JVM_Bind
- ArcGis Engine 要素折点转点的代码实现
- 内部类
- 自定义及发布一个webService服务
- oracle正则函数,regexp_substr,按分隔符单行转多行
- 802.1X协议的工作机制流程详解
- 【POJ】[1573]Robot Motion
- 进制转换
- 天纵智能软件快速开发平台单页编辑插件
- HttpClient使用详解(MultipartEntityBuilder 上传文件等)
- Drools 规则文件 ——语法属性
- POJ - 1979-Red and Black
- O(1)快速乘注意事项
- SPFA
- Android ServiceConnection
- zookeepeer选举master