剑指offer 14. 二进制中1的个数

简介: 剑指offer 14. 二进制中1的个数

题目描述

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

注意

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


数据范围

−100≤ 输入整数 ≤100

样例1

输入:9
输出:2
解释:9的二进制表示是1001,一共有2个1。


样例2

输入:-2
输出:31
解释:-2在计算机里会被表示成11111111111111111111111111111110,
      一共有31个1。


方法一:位运算 O(logn)


这题需要用到位运算的知识:


如果 n nn 的二进制表示最后一位为 1 11 ,则 r e s resres ++ 。

每次判断完后,都将 n nn 往右移 1 11 位,即消除 n nn 的二进制表示下的最后一位。

这里需要注意的是,c++ 中如果将负数往右移一位,最高位会自动补 1 11 ,这样循环就永远不会结束。所以我们要先将数字转换成无符号整型,这样每次右移就会在最高位补 0 00 ,循环就可以结束了。

class Solution {
public:
    int NumberOf1(int n) {
        int res = 0;
        unsigned int un = n;
        while (un)   res += un & 1, un >>= 1;
        return res;
    }
};


欢迎大家在评论区交流~



目录
相关文章
|
存储 缓存 安全
Java HashMap详解及实现原理
Java HashMap是Java集合框架中常用的Map接口实现,基于哈希表结构,允许null键和值,提供高效的存取操作。它通过哈希函数将键映射到数组索引,并使用链表或红黑树解决哈希冲突。HashMap非线程安全,多线程环境下需注意并发问题,常用解决方案包括ConcurrentHashMap和Collections.synchronizedMap()。此外,合理设置初始化容量和加载因子、重写hashCode()和equals()方法有助于提高性能和避免哈希冲突。
737 17
Java HashMap详解及实现原理
|
机器学习/深度学习 自然语言处理 算法
NLP技术在聊天机器人中的应用:技术探索与实践
【7月更文挑战第13天】NLP技术在聊天机器人中的应用已经取得了显著的成果,并将在未来继续发挥重要作用。通过不断探索和创新,我们可以期待更加智能、自然的聊天机器人的出现,为人类生活带来更多便利和乐趣。
|
SQL 前端开发 安全
使用 BurpSuite 绕过验证码实施表单
使用 BurpSuite 绕过验证码实施表单
使用 BurpSuite 绕过验证码实施表单
|
存储 分布式计算 监控
Hadoop的NameNode的监控与副本管理
【4月更文挑战第15天】NameNode是Hadoop HDFS的关键组件,负责元数据管理和监控,确保数据安全、可靠和性能。监控包括NameNode的状态、资源使用和性能,以保证集群稳定性。NameNode在副本管理中负责副本创建、分布、维护和删除,确保数据冗余和容错性。有效的监控和副本管理策略对Hadoop集群的高效运行至关重要。
311 2
|
机器学习/深度学习 存储 算法
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
978 0
|
存储 关系型数据库 网络安全
CEPH搭建
CEPH搭建
491 0
|
机器学习/深度学习 人工智能 JSON
LangChain + ChatGLM2-6B 搭建个人专属知识库
之前教过大家利用 langchain + ChatGLM-6B 实现个人专属知识库,非常简单易上手。最近,智谱 AI 研发团队又推出了 ChatGLM 系列的新模型 ChatGLM2-6B,是开源中英双语对话模型 ChatGLM-6B 的第二代版本,性能更强悍。 树先生之所以现在才更新 ChatGLM2-6B 知识库教程,是想等模型本身再多迭代几个版本,不至于刚出的教程很快不适配,或者项目本身一堆 bug,那样大家使用体验也不好。
3188 3
|
存储 网络性能优化 芯片
芯片引脚字母代表的意义
芯片引脚字母代表的意义---常用
8972 0
|
Java 应用服务中间件 Apache
|
编译器 C语言 C++
Qt6学习笔记一(安装、新建工程(cmake编译)、QPushButton、对象树、Qt窗口坐标系)
Qt6学习笔记一(安装、新建工程(cmake编译)、QPushButton、对象树、Qt窗口坐标系)
648 0