求二进制中1的个数的几种解法
发布日期:2021-10-02 06:27:36
浏览次数:2
分类:技术文章
本文共 766 字,大约阅读时间需要 2 分钟。
题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
求解思路1
我们可以设置一个无符号整数1
,从低位往高位(1-32
)一直移动,然后与整数对应位置的数字进行比较(与运算),来实现计算1
的个数,代码如下:
class Solution { public: int NumberOf1(int n) { int count=0; unsigned int flag=1; while(flag){ if(n&flag){ count++; } flag<<=1;//左移一位 } return count; }};
运行时间:3ms占用内存:484k
求解思路2
一个非0
的数n
减去1
的值我们计为tmp
,则n
与tmp
与运算后会得到下一个出现1
的位置,我们将运算的结果赋给n
,重新计算,这样的话有多少个1
我们就计算多少次,而不是像思路1
中的计算32
次
如四位二进制1000
表示8
,而8-1
的四位二进制表示为0111
,它们与运算的结果为0
,因此,8
的二进制中只有1
个1
,代码如下:
class Solution { public: int NumberOf1(int n) { int count=0; while(n){ count++; n=(n-1)&n; } return count; }};
运行时间:2ms占用内存:484k
转载地址:https://blog.csdn.net/Jeaten/article/details/108077399 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月13日 12时10分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OpenTSDB安装极简备忘
2019-04-27
oobbs开发手记
2019-04-27
数据库事务隔离级别(转)
2019-04-27
分布式与集群的区别
2019-04-27
关于有状态类与集群
2019-04-27
关于Hibernate中对集合类型的映射
2019-04-27
关于为什么单向一对多(one-to-many)要使用关联表的再思考
2019-04-27
HQL&Criteria
2019-04-27
基于Akka-Streams的HTTP代理的实现
2019-04-27
Scala之::的研究
2019-04-27
Join和Fetch
2019-04-27
Java培优班-第四天 - 基础语法 -(上午:复习+循环,下午:循环+数组)
2019-04-27
java 注解@Test的简单用法、测试 - 单元测试方法
2019-04-27
Java培优班-第五天 - 基础语法 - (数组+变量+OOP1)
2019-04-27
eclipse 快捷键
2019-04-27
java中的静态类 - 心得
2019-04-27
Java培优班-第六天 - JavaSE -(面向对象)
2019-04-27