博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【编程之美】2.1 二进制数中1的个数
阅读量:6348 次
发布时间:2019-06-22

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

这个已经看过几遍了,列一下各种解法。

#include 
//n&(n-1) 每次消去最低位的1//算法复杂度与2进制中1的个数有关int numOfOne(unsigned int n){ int num = 0; for(;n; n = n & (n - 1), num++); return num;}//利用位运算的分治算法int numOfOne2(unsigned int n){ n = (n & 0x5555) + ((n >> 1) & 0x5555); //注意 一定要把“+”号左后分别括起来 否则会出错 n = (n & 0x3333) + ((n >> 2) & 0x3333); n = (n & 0x0f0f) + ((n >> 4) & 0x0f0f); n = (n & 0x00ff) + ((n >> 8) & 0x00ff); return n;}int main(){ int a = numOfOne(678); int b = numOfOne2(678); return 0;}

 

上面是比较好的两种,还可以直接查找表,适合在2进制位数少或者空间充分的时候用。

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

你可能感兴趣的文章
量化交易之启航
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
IO Foundation 3 -文件解析器 FileParser
查看>>
linux学习经验之谈
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>
JS中将变量转为字符串
查看>>
servlet笔记
查看>>
JVM(五)垃圾回收器的前世今生
查看>>
CentOS 7 下安装 Nginx
查看>>
Spring Boot 自动配置之@EnableAutoConfiguration
查看>>
web前端笔记
查看>>
import 路径
查看>>
使用optimizely做A/B测试
查看>>
finally知识讲解
查看>>
Matplotlib绘图与可视化
查看>>
openstack ocata版(脚本)控制节点安装
查看>>
【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...
查看>>