求一个数二进制位中有多少个 1 的不同解法
2015-10-17 16:44
232 查看
*返回一个数的二进制表达中1的个数。*
本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1703820
#include<stdio.h> int main() { unsigned int i; scanf("%d",&i); printf("%d的二进制表达中有 %d 个1",i,count_one_bits(i)); return 0; } int count_one_bits(unsigned int m) { int n,count; // 返回 1的位数 n = m; count = 0; while(n % 2 == 0) n = n / 2; while(n % 2 == 1) { count++; do { if (n != 0) n = n / 2; else break; } while(n % 2 == 0); } return count; }这就是最容易想到的办法,不断地除2模2取余,下面给出另外一种方法(省略部分语句)
... i = 32; while(i--) { if(num & 1 == 1) count++; num = num>>1; }这种方法就是向右移位,使最低位&上1进行判断,还有一种更为高效的方法
int count_one_bit(int num) { int count = 0; while(num) { count++; //只要一个数不为0,则二进制表达中至少有一个1 num = num & (num-1);//没执行一次这条语句,其实就是使该数最低位的一个1置成0 } return count; }
本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1703820
相关文章推荐
- SQL Server日志
- unity, 由于project settings中time scale变成0导致动画不播放
- 获取网上数据的两种方法HttpURLConnection和HttpClient
- hibenate 操作oracle 日期问题
- Asp.NET利用ClientScript.RegisterStartupScript("")的同学,请注意!
- WF静态成员4
- 泪眼纷纷
- 使用积分图像进行自适应二值化[Derek Bradley, Gerhard Roth, 2007]
- Java 八大排序之——希尔排序
- iOS UIWebView播放视频崩溃问题
- 反射初悟
- java动手动脑 2
- 第三章动手动脑1
- 注解Annotation补充介绍
- Python - logging
- (原创)c#学习笔记03--变量和表达式03--变量03--字面值
- NOIP复习-002——最长不下降数列的两种做法
- 一个有趣的问题
- js中的一个方法怎么将数据主动传给另一个方法
- Python之Split函数