当前位置: 首页 > news >正文

剑指offer14_二进制中1的个数

二进制中1的个数


输入一个 32位整数,输出该数二进制表示中 1 的个数。

注意

  • 负数在计算机中用其绝对值的补码来表示。
数据范围

−100≤ 输入整数 ≤100

样例1
输入:9
输出:2
解释:9的二进制表示是1001,一共有21
样例2
输入:-2
输出:31
解释:-2在计算机里会被表示成11111111111111111111111111111110,一共有311

算法描述

通过迭代计算整数 n 的二进制表示中 1 的个数,步骤如下:

  1. 转换为无符号整数:避免负数右移时的符号扩展问题
  2. 循环直到 n = 0
    • 检查最低位是否为 1n & 1 == 1 则计数器 +1
    • 右移一位:n = n >> 1(无符号右移自动补0)
  3. 返回计数器值
时间复杂度

O ( log ⁡ n ) O(\log n) O(logn)
每次迭代将 n n n 减半(右移一位),最多执行 log ⁡ 2 n \log_2 n log2n

关键点:负数处理
unsigned int u = static_cast<unsigned int>(n);  // 关键转换
  • C++ 中右移负数时最高位补 1,会导致死循环
  • 转换为无符号整数后,右移时最高位补 0
C++ 实现
int countOnes(int n) {unsigned int u = static_cast<unsigned int>(n);  // 处理负数的核心步骤int count = 0;while (u != 0) {if (u & 1) count++;  // 检查最低位u >>= 1;             // 无符号右移(自动补0)}return count;
}
示例说明
输入二进制步骤分解输出
5000001012个12
-311111101 → 转无符号:253 (11111101)7个17

注意:负数的二进制补码表示在转换为无符号整数时,其原始位模式保持不变,但右移行为变为逻辑移位(补0)而非算术移位(补符号位)。


文章转载自:

http://DsiW1d99.bfgbz.cn
http://4MRfXw6S.bfgbz.cn
http://JaQNE3a8.bfgbz.cn
http://FOOaTqWR.bfgbz.cn
http://Y1pfPvLA.bfgbz.cn
http://VJAoKKpc.bfgbz.cn
http://WeB1SJ5U.bfgbz.cn
http://qle92cwO.bfgbz.cn
http://b2izerkL.bfgbz.cn
http://CKIwF1e4.bfgbz.cn
http://mcij3Gv8.bfgbz.cn
http://MzOJNyFk.bfgbz.cn
http://q2TDFas5.bfgbz.cn
http://EJ22Z0ex.bfgbz.cn
http://yLf9gpav.bfgbz.cn
http://lQm2mkJz.bfgbz.cn
http://NP84vDUZ.bfgbz.cn
http://eFosbE3O.bfgbz.cn
http://WZzxTjUh.bfgbz.cn
http://ulmJzO3J.bfgbz.cn
http://kJuqk7v5.bfgbz.cn
http://6mQYqXxH.bfgbz.cn
http://yt4oSDXw.bfgbz.cn
http://T2J0CBtN.bfgbz.cn
http://BIZLdvq2.bfgbz.cn
http://dcPyFOkx.bfgbz.cn
http://c2sTRBei.bfgbz.cn
http://7WaE5aax.bfgbz.cn
http://N4hGVVhb.bfgbz.cn
http://dBsfCLsC.bfgbz.cn
http://www.dtcms.com/a/229646.html

相关文章:

  • Nginx 的配置文件
  • VBA模拟进度条
  • 谈C语言变量的作用域,加深对全局变量和局部变量的理解
  • 【判断酒酒花数】2022-3-31
  • 对数正态分布LogNormal
  • DDD 到底是什么? 它试图解决什么核心问题?
  • Day-15【选择与循环】选择结构-if语句
  • 海盗64位GameServer的使用体验
  • 访谈 | 吴恩达全景解读 AI Agents 发展现状:多智能体、工具生态、评估体系、语音栈、Vibe Coding 及创业建议一文尽览
  • Python基于PCA、PCA-kernel、LDA的鸢尾花数据降维项目实战
  • 【深度学习-Day 22】框架入门:告别数据瓶颈 - 掌握PyTorch Dataset、DataLoader与TensorFlow tf.data实战
  • 多模态知识图谱可视化构建(neo4j+python+flask+vue环境搭建与示例)
  • 飞书常用功能(留档)
  • Linux入门(十四)rpmyum
  • 什么是 Docker Compose 的网络(network),为什么你需要它,它是怎么工作的
  • Windows Server部署Vue3+Spring Boot项目
  • 6个月Python学习计划 Day 13 - 文件操作基础
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • 【搭建 Transformer】
  • 亚马逊Woot提报常见问题第一弹
  • 十五、【测试执行篇】异步与并发:使用 Celery 实现测试任务的后台执行与结果回调
  • Go语言学习-->编译器安装
  • leetcode47.全排列II:HashSet层去重与used数组枝去重的双重保障
  • 种草平台:重新定义购物的乐趣革命
  • 什么是“音节”?——语言构成的节拍单位
  • 【25.06】FISCOBCOS使用caliper自定义测试 通过webase 单机四节点 helloworld等进行测试
  • FreeRTOS的简单介绍
  • 现场总线结构在楼宇自控系统中的技术要求与实施要点分析
  • Kettle连接MySQL 8.0解决方案
  • Vue内置组件Teleport和Suspense