博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写一个函数返回参数二进制中 1 的个数
阅读量:4116 次
发布时间:2019-05-25

本文共 1103 字,大约阅读时间需要 3 分钟。



思路一:一个数取模的结果就是最低比特位,如果取模是1,则计数。然后把这个数除以2(即去掉最低比特位),再判断。

但是这个程序有局限性,只能判断正数。

#include
#include
int countBit(int i) { int c = 0;while (i){ if (i % 2 == 1)//判断最低比特位 { c++; } i/= 2;//去掉最低比特位 } return c; } int main() { int i = 254; int c = countBit(i); printf("%d", c); system("pause"); return 0; }

思路二:把这个数与1按位与(两个操作数同时为1,&结果为1),然后再右移移位,再判断其他位。但是这个方法必须循环32次。

#include
#include
int countBit(int i) { int c = 0; int n = 0; while (n<32) { if (i&1)//判断最低比特位 { c++; } i >>= 1;//去掉最低比特位 n++; } return c; } int main() { int i = 254; int c = countBit(i); printf("%d", c); system("pause"); return 0; }

三(最优方法):把这个数减一,再&1

#include
#include
int count_one_bits(unsigned int value){ int count = 0; while (value) { value = value&(value - 1); count++; } return count;//通过return返回,只能返回一个值,并且返回执行权。}int main(){ int value = 254; int count = count_one_bits(value); printf("二进制中1的个数:%d\n", count); system("pause"); return 0;}
程序运行后结果为:7.

转载地址:http://mlypi.baihongyu.com/

你可能感兴趣的文章
非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)
查看>>
Tomcat启动错误,端口占用
查看>>
laravel 修改api返回默认的异常处理
查看>>
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>