《LeetCode191.位1的个数》 时隔一年,再次面对这篇博文,我不再胆怯
论如何计算一个整数的二进制里数字1个数
- 用类似计算十进制数中有多少个1一样的思想,我们采用while循环和模二除二的方法,不过我们都知道,数据在内存里都是以补码的形式储存的,正数的补码和原码相同,大概可以估计这种方法对正数应该是可行的,但是对于负数呢?对于负数此时二进制的最高位为符号位,要让我们的方法一依然有效的话,就不能让编译器知道此时的二进制码表示为有符号的-1,什么意思呢?就是我们需要将最高位的符号位的效果给去除,不难想到,我们可以将此时的-1转置为unsigned_int…(后面的写法就不再说了)
- 那有没有一种全新的方法来解决我们一开始提出的问题呢?
—————————————分割线—————————————————— 2021 / 11 / 26
起初这篇博文是我大一第一次接触算法题,这是LeetCode上的一道题目,LeetCode191.位1的个数,第一次接触到这个题目我还显得很“稚嫩”,没有一点思路,当初写下这篇文章就是想记录我第一次在算法题上获得的成就感,由于自己懒,这篇文章也就没有写完,现在来完善它!
只是一道很简单的位运算题(现在看来hhhhhhhhh
int hammingWeight(uint32_t n) { // 由于传进来的参数是32位无符号整数,故不需要再进行转换啦
int digits = 0;
int i = 0;
while(i < 32)
{
if( (n >> i++) & 1 == 1)
{
digits++;
}
}
return digits;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)