
剑指offer JZ11二进制中1的个数
发布日期:2021-05-07 13:14:25
浏览次数:27
分类:精选文章
本文共 548 字,大约阅读时间需要 1 分钟。
二进制中1的个数
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
思路一
通过除2取余,将余数存到数组中,分别对正负数进行处理。比较繁琐,容易出错,遗漏特殊情况
思路二
把十进制看成二进制,通过位与和移位,判断每一位是否为1
怎么取移位的结果?方式一:
n&1 这样就能取出最后一位,再循环右移n>>=1 (只能用于正数),这里用n>>>1即可解决方式二:
(n-1)&n 这个操作可以将n二进制数最右边的一个1转为0,循环操作知道为0。(不需要像 方式一 那样取32次) 例: 二进制数 1100 减1 -> 1011 1011 & 1100 (即(n-1)&n) -> 1000代码
方式一
public int NumberOf1(int n) { int count = 0; while(n != 0){ if((n & 1) == 1) count++; n = n>>>1; } return count;}
方式二
public int NumberOf1(int n) { int count = 0; while(n != 0){ n = (n-1) & n; count++; } return count;}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月29日 21时55分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Asp.Net Core 2.1+的视图缓存(响应缓存)
2019-03-06
【wp】HWS计划2021硬件安全冬令营线上选拔赛
2019-03-06
Ef+T4模板实现代码快速生成器
2019-03-06
JQuery选择器
2019-03-06
多线程之volatile关键字
2019-03-06
2.2.2原码补码移码的作用
2019-03-06
Java面试题:Servlet是线程安全的吗?
2019-03-06
Java集合总结系列2:Collection接口
2019-03-06
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
2019-03-06
比技术还重要的事
2019-03-06
linux线程调度策略
2019-03-06
软中断和实时性
2019-03-06
Linux探测工具BCC(可观测性)
2019-03-06
SNMP介绍及使用,超有用,建议收藏!
2019-03-06
HDU5589:Tree(莫队+01字典树)
2019-03-06
不停机替换线上代码? 你没听错,Arthas它能做到
2019-03-06
Python开发之序列化与反序列化:pickle、json模块使用详解
2019-03-06
采坑 - 字符串的 "" 与 pd.isnull()
2019-03-06
无序列表 - 链表
2019-03-06
Matplotlib绘制漫威英雄战力图,带你飞起来!
2019-03-06