写一个函数返回参数二进制中 1 的个数
来源:互联网 发布:jar包日志 linux 输出 编辑:程序博客网 时间:2024/06/08 13:11
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ int num = 0; int count = 0; scanf("%d",&num); while(num) { if(num%2 == 1) count++; num = num/2; } printf("count = %d\n",count); return 0;}
上面这段代码只能统计正数的二进制中的1的个数。存在一定的缺陷请看
如果想让上面这个方法也可以求的负数中二进制中1的个数 请看下面:
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int count_one_bit(unsigned int n){ int count = 0; while(n) { if(n%2 == 1) count++ n = n/2; } return count;}int main(){ int num = 0; int ret = 0; scanf("%d",&num); ret = count_one_bit(num); printf("%d\n",ret); return 0;}
正确方法1:
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ int num = 0; int count = 0; int i = 0; scanf("%d",&num); for(i = 0;i < 32;i++) { if(((num>>i)&1) == 1) { count++; } } printf("count = %d\n",count); return 0;}
这段代码呢就不不管你二进制中有多少个1你都得循环32次。
正确方法2:
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ int num = 0; int count = 0; scanf("%d",&num); while(num) { num = num&(num-1); count++; } printf("count = %d\n",count); return 0;}
怎么去理解num = num&(num-1)这个表达式呢?下面我给你们举例说明
00001111——(1)num
00001110——(2)num-1
00001110——(1)&(2)的结果;也就是新的num。
00001101——新的num-1
00001100——又一个新的num
(1)和新的num相比是不是少了一个1
(2)和新的num-1相比也是不是少了一个1。
根据结果我们可以说明这个表达式每次进行运算的时候就是去掉最右边的1。
也就是说这段代码中有几个1就循环几次。很高效。
正确方法3:
用函数的方法求解这道题;
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int count_one_bit(int n){ int count = 0; while(n) { count++; n = n&(n-1); } return count;}int main(){ int num = 0; int ret = 0; scanf("%d",&num); ret = count_one_bit(num); printf("%d\n",ret); return 0;}
阅读全文
0 0
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 自动填充插件Autocomplete demo
- robot framwork 失败用例继续执行
- Linux下interface文件修改
- python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
- protobuf VS2015 windows安装流程笔记
- 写一个函数返回参数二进制中 1 的个数
- SortedSet
- 两种栈的实现--顺序栈和链表栈
- Mac:TexStudio I3 too old
- 在Windows搭建基于selenium+python的自动化测试环境
- 线性表(顺序表与链表)的实现
- 从CSV文件中读取数据,使用逗号','分割问题
- 接口
- 从资产端直接下手,精准把控车贷标的!