算法学习十----整数的二进制表示中1的个数
来源:互联网 发布:php获取p标签中的img 编辑:程序博客网 时间:2024/04/28 01:17
题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
这是一道考查位运算的题目,做位运算的时候一定要把负数也考虑进去,刚开始做的时候忘了考虑进去,结果输入一个负数的时候就彻底凌乱了。
刚开始的思路是先判断整数的最右边一位是不是1,然后把整数右移一位,这样,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。这样每次移动一位,直到这个整数变成0为止。
然后拿一个负数来举例子,如果把如数0x40000000一直做右移运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。
换一种思路,首先将数字n和flag=1做与运算,判断最低位是不是1,接着左移flag,这样可以判断判断次低位是不是1,反复左移,直到flag超出了int所能表示的范围。
算法实现的伪代码如下:
int count = 0;unsigned int flag = 1;while flag is in the unsigned int's scope if countdown to the flag'th is 1 then add countshift flag to the left by 1
C++实现
int CountBinOne(int &n){ //define count and flag int count = 0; unsigned int flag = 1; //while flag is in the unsigned int's scope while(flag) { //if countdown to the flag'th is 1 if(n & flag) { //then add count ++count; } //shift flag to the left by 1 flag = flag << 1; } return count;}
0 0
- 算法学习十----整数的二进制表示中1的个数
- 整数二进制表示中1的个数[算法]
- 整数二进制表示中1的个数
- 整数二进制表示中1的个数
- 整数二进制表示中1的个数
- 整数二进制表示中1的个数
- 整数二进制表示中1的个数
- 整数二进制表示中1的个数
- 几种统计整数二进制表示中1的个数(算法小学习)
- 整数的二进制表示中1 的个数
- 整数的二进制表示中1的个数
- 28.整数的二进制表示中1 的个数
- 统计整数的二进制表示中1的个数
- 28、整数的二进制表示中1的个数
- 100-28- 整数的二进制表示中1的个数
- 28.整数的二进制表示中1 的个数
- 整数的二进制表示中1的个数
- 整数的二进制表示中1的个数
- Javascript绝句欣赏
- matlab 常用特殊字符查询
- 视图控制器
- ant 条件判断 condition
- 网爆新生代偶像身价 欧豪靠汽车天价代言登榜首
- 算法学习十----整数的二进制表示中1的个数
- cocos2d-x Box2d 入门例子
- WiFi共享精灵下载好了,但是打不开怎么破
- 关于源到源编译器后期优化的新想法
- http协议
- C#编程打印ASCII码
- 面试中的技巧和求职者需要注意的地方
- 压缩感知跟踪(二)
- 导航控制器