算法详解:如何计算二进制中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的个数。这种方法简洁且快速,尤其适用于处理大范围的整数。通过理解和应用这一技巧,不仅能解决类似的面试问题,还能加深我们对位运算的掌握,提高编程能力。
热门推荐
家长与学生手机使用协议条约
幼儿园科学探究活动组织与指导策略——以“水龙卷来袭”为例
与机场相关的英语词汇、常见句型及对话
壁虎究竟是何方神圣?为何有人说“愿打十条蛇,不杀家壁虎”?
2024年四川大学在重庆各专业录取分数线及位次汇总
辅酶Q10上百元一瓶,能预防心肌炎,修复受损心肌吗?真相来了
中医五行理论是什么?一文详解中医五行基础知识
七道数学极限练习题及其答案详细步骤
并非偶然,U20国足如何实现华丽蜕变?原因找到,不只是实战锻炼
从书面故事到口语化的表达你需要这4步
香菇焖鸡的绝世美味秘籍!营养丰富、口感爆棚,轻松做出节日大餐!
最有效的减重运动指南:在家也能打造完美身材
如何用扬声器连接低音炮
商品期货时序指数和截面指数的构建及现实意义
道教修炼与生活哲学:深入探究道教的文化内涵与实践价值
乳酸钙是什么,有什么作用
如何有效管理工期和进度,确保项目按时完成?
茶餐厅装修设计:传统与现代交织的味蕾之旅
留守儿童,需要哪些社会支持?
无行政经验面试行政助理
怎样才能知道,自己到底想要什么样的伴侣?
新能源汽车维修“缺位”千亿级市场待起飞
孩子不会解题?或许是你的教育方式错了!
我们整理了一份化妆品相关专业院校目录 | 高考招录进行时
咽喉炎右边淋巴结肿大怎么办?5种治疗方法全解析
练臀的壶铃多重比较好
以案释法 | 谈恋爱吗?包被骗的那种!
曾国藩5句家训,240子孙无一败家
政策力挺,中国医院积极探索国际化医疗
北欧神话中的命运三女神究竟是什么?