算法详解:如何计算二进制中1的个数
创作时间:
作者:
@小白创作中心
算法详解:如何计算二进制中1的个数
引用
1
来源
1.
https://bbs.huaweicloud.com/blogs/432793
在计算机科学领域,理解二进制表示和位运算对于解决各种编程问题至关重要。本文将介绍一个经典算法问题:如何计算一个整数的二进制表示中1的个数。通过这个例子,你将掌握一种高效且优雅的解决方案,并深入了解位运算的巧妙应用。
问题描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:-2^31 <= n <= 2^31 - 1
即范围为:-2147483648 <= n <= 2147483647
示例1
输入:10
返回值:2
说明:十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1
示例2
输入:-1
返回值:32
说明:负数使用补码表示,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1
解题思路
关键在于理解位运算n & (n - 1)的作用:它可以将n的位级表示中最低的那一位1设置为0。通过不断执行这个操作,直到n变为0,可以统计出二进制表示中1的个数。这种方法的时间复杂度为O(M),其中M表示1的个数。
代码实现
public int NumberOf1(int n) {
int cnt = 0;
while (n != 0) {
cnt++;
n &= (n - 1);
}
return cnt;
}
总结
通过位运算n & (n - 1),我们能够以O(M)的时间复杂度(其中M为二进制表示中1的个数)高效计算一个整数的二进制表示中1的个数。这种方法简洁且快速,尤其适用于处理大范围的整数。通过理解和应用这一技巧,不仅能解决类似的面试问题,还能加深我们对位运算的掌握,提高编程能力。
热门推荐
脑心通胶囊:揭秘成分质量控制
秋冬护心脑,脑心通胶囊守护你的健康
从三分钟热度到职场长跑:如何保持动力?
小葵教你如何克服三分钟热度
“妈妈厨房”+学生点菜:校园餐饮管理的创新实践
智能食堂:校园餐饮新潮流
蜂蜜芥末酱:健康美味的秘密武器
自制蜂蜜芥末酱,秒杀赛百味!
蜂蜜芥末酱的营养真相:安全食用指南
蜂蜜芥末酱的正确保存方法,你做对了吗?
朴小样家蜂蜜芥末酱保鲜秘籍大揭秘!
秋冬必备:科学保存蜂蜜芥末酱
无锡职院食堂开放日:家校联动共筑食品安全防线
有兴奋有紧张有成长有感动 4位年轻记者尝鲜“第一个记者节”
揭秘林正英:从开机仪式到经典桥段,僵尸片之王的拍摄秘辛
华为手机充电到60%就停?一招教你搞定!
科学充电技巧:告别手机充电烦恼
湖南独坡镇发展钩藤种植产业,2024年新增种植面积4000余亩
无线火灾自动报警系统:原理、特点及应用场景
驱动智能引擎,多模态&语音&视觉大模型系列标准成果正式发布!
探秘整流二极管:关键参数与核心作用全解析
LED灯珠基本知识:从工作原理到发展史的全面解析
如何培养自己的兴趣?
焊接贴片电容、电阻、二极管和三极管全总结
健康生活方式与心理调适:调整心态,回归健康
双十一购车指南:大众朗逸、日产轩逸、比亚迪秦PLUS DM-i大比拼!
揭秘西安职高的宿舍生活:让家长放心的秘密!
高校辅导员教你高效宿舍管理
中国的“慧眼”——李惕碚
天文学专业就业前景怎么样 就业方向有什么