二进制中含有1的个数

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标 使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标... 阅读详情

看到剑指Offer中二进制中1的个数这个题目,才感觉到位运算的强大。原来整数不用换成二进制,遇到位运算符会自动变成二进制进行计算。所以当输入的数为负数时,也不用考虑负数的表示问题,因为在进行二进制运算时,系统会自动将其以补码形式表示。

num & 1 为真则说明num是奇数,为0则说明num是偶数

例如二进制:num = 0110 1011 中含有多少个1呢,当num & 0000 0001 结果为1说明num右边第一位为1,当num & 0000 0010 结果为1,说明右边数第二位也为1;

所以定义 int  flag = 1;flag << 1左移一位与num进行与计算 判断二进制每一位是否为1,当flag结果为0时,循环结束

具体代码如下所示:

class Solution {
public:
     int  NumberOf1(int n) {
         int count = 0;
         int flag = 1;
         while(flag)
         {
             if(n&flag)
                 count++;
             flag = flag << 1;             
         }
         return count;
     }
};

位运算的优先级:


下面列举了一些常见的二进制位的变换操作。

功能 | 示例 | 位运算

----------------------+---------------------------+--------------------

去掉最后一位 | (101101->10110) | x>>1

在最后加一个0| (101101->1011010) | x<<1

在最后加一个1| (101101->1011011) | x<<1+1

把最后一位变成1| (101100->101101) | x|1

把最后一位变成0| (101101->101100) | x| 1-1

最后一位取反 | (101101->101100) | x^ 1

把右数第k位变成1 | (101001->101101,k=3) | x|(1<< (k-1))

把右数第k位变成0 | (101101->101001,k=3) | x& ~(1<<(k-1))

右数第k位取反 | (101001->101101,k=3) | x^(1 shl (k-1))

取末三位 | (1101101->101) | x&7

取末k位 | (1101101->1101,k=5) | x&(1<<(k-1)

取右数第k位 | (1101101->1,k=4) | x>>(k-1)&1

把末k位变成1| (101001->101111,k=4) | x|(1<<k-1)

末k位取反| (101001->100110,k=4) | x^ (1<<k-1)

把右边连续的1变成0 | (100101111->100100000) | x&(x+1)

把右起第一个0变成1 | (100101111->100111111) | x| (x+1)

把右边连续的0变成1 | (11011000->11011111) | x| (x-1)

取右边连续的1 | (100101111->1111) | (x^ (x+1))>>1

去掉右起第一个1的左边| (100101000->1000) | x&(x^(x-1))(或x&(-x))


基于STM32的3D打印机控制 通过本项目,我们成功搭建了一个基础的3D打印机控制系统,能够控制步进电机和加热元件。这为使用STM32开发功能丰富的3D打印机提供了基础,您可以在此基础上继续扩展功能,如增加LCD显示、SD卡存储、联网控制等功能。在这个项目中,我们将使用STM32微控制器开发一个基础的3D打印机控制系统。通过控制步进电机、加热元件和温度传感器,我们将实现一个简单的FDM(熔融沉积制造)3D打印机控制。- 检查PWM信号的生成功能,确认加热元件的控制逻辑是否正常。- 增加适当的滤波和校准算法,以提高温度读取的准确性。 阅读详情

相关推荐

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 504

C++--二进制中1的个数

二进制中1的个数 题目: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 方法一: #include<iostream> #include<math.h> using namespace std; int nums(int n) { int count=0; int flag=1; while(flag){ ...

海到无边天作岸 山登绝顶我为峰 5908

【计算机组成原理】课程设计四:控制器设计(二)

本文主要是介绍了计算机组成原理课程设计四其二,即控制器设计(二),属于计算机课程设计专栏

superiony的博客 1430

《剑指offer刷题笔记》14、二进制中1的个数 【c++详细题解】

题目 输入一个 323232 位整数,输出该数二进制表示中 111 的个数。 注意: 负数在计算机中用其绝对值的补码来表示。 样例1 输入:9 输出:2 解释:9的二进制表示是1001,一共有2个1。 样例2 输入:-2 输出:31 解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。 思路1 lowbit(x)lowbit(x)lowbit(x)函数的作用 lowbit(x)lowbit(x)lowbit(x)操作返回 xx

林深不见鹿 的博客 2865

RK3576平台部署NanoTrack:边缘AI视觉跟踪实战指南

边缘AI部署是将深度学习模型在资源受限的嵌入式设备上高效运行的关键技术,其核心在于模型压缩、硬件适配与软件栈优化。通过INT8量化、算子融合与内存优化等原理,能显著降低模型计算量与内存占用,从而在嵌入式NPU上实现实时推理。这项技术的价值在于为安防监控、无人机视觉、工业检测等场景提供低功耗、高响应的智能感知能力。以瑞芯微RK3576平台部署轻量级视觉跟踪模型NanoTrack为例,其过程涉及模型结构分析、RKNN工具链转换、C++推理程序开发及多线程性能优化,完整展现了从算法到产品的工程化路径,为开发者提供

weixin_31887307的博客 427

OpenSceneGraph编译、安装、开发环境

详细描述WIndows 10下使用Visual Studio 2019编译OpenSceneGraph 3.6.5的操作流程

国产CAx(CAD/CAE/CAM)软件研发 8772

二进制中1的个数

题目描述 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 方法一: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最直观的方法,就是把这个数转变为二进制,然后判断最小位位是否为1,然后把数字往右移一位,这样右边

和产品battle的秃头程序 4759

ESP32S3开发板玩转多语言AI对话:小智语音机器人粤语/日语/韩语实测

本文基于正点原子ESP32S3开发板,实测了“小智AI”语音机器人的多语言对话能力。项目巧妙整合云端AI与嵌入式硬件,实现了对粤语、日语、韩语等语言的实时识别与合成,为开发者和爱好者提供了一个低成本、可玩性高的跨语言人机交互开发平台。

h9j8k7l6m5n的博客 540

二进制中包含1的数量

#include using namespace std; int func(int x) { int count = 0; while(x) { count ++; x=x&(x-1); } return count; } int main() { cout<< func(15) << endl; return 0; }结果是4.

Thinking 641

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

SEGGER Embedded Studio初体验

先楫HPM5E00EVK开发环境搭建

hywing's blog 1109

计算二进制中含有1的个数

二进制含有1的个数int WhCalcOne(int iData) { int iCount = 0; while(iData) { iCount++; iData = iData & (iData - 1); } return iCount; }二进制含有0的个数int WhCalcZero(int iData) { retu

wan_ghuan 360

【华为OD机试真题】282、求满足条件的最长子串的长度 | 机试真题+思路参考+代码分析 (C++、Java、Py、C语言、JS)

题目描述 >给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求: >  1、只包含1个字母(a~ z,A~Z), 其余必须是数字; 2、字母可以在子 串中的任意位置; >  如果找不到满足要求的子串,如全是字母或全是数字,则返回-1

KJ.JK 1万+

输入一个非负数,判断二进制下该数含有“1”的个数。

使用移位和位与运算,时间复杂度O(n); #include "stdio.h" #include "math.h" int main() { int a; scanf("%d",&a); for (i = 1; i <= 32; i++) { if (a >> (i - 1) & 1 == 1) q++; } printf("%d", q); return 0; } 进阶版算法(很重要!!!) #include "stdio.h" int main()

nepu_bin的博客 864

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

求一个整数中,二进制数含有1的个数

// 求一个整数中,二进制数含有1的个数 #include #include using namespace std; int solusion(int n) { int count = 0 ; while(n) { count++ ; // 实质上是将最右边的1置为0,再按位与,去掉最后一个1,依此类推直到最后一个0 n = n & (n-1) ; }

Mr.Simple的专栏 1267

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

十进制数含有的二进制1个数

获取某十进制数中含有的二进制1的个数,求数中1的个数???1000-1 = 0111 ,正好是原数取反,这就是原理,比移位操作效率高 #include      int func(int x)              {  int count = 0;   while(x)    {      count++;      x = x&(x-1);  }     return

qisefengzheng的专栏 总有一天你将破蛹而出 475

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

返回一个数二进制中含有的1的个数

int func(int x) { int count = 0; while (x) { count++; x = x & (x - 1); } return count; }

编程小喵 159

统计一组二进制数中的含有1的个数

问题:统计一组二进制数中含有1的个数 思路:利用位运算,当n&(n-1) 可以发现原二进制数中少了一位1,同时利用计数器进行累加即可。

学习的路上,永不停止 250

统计给定一个整数以二进制表达时含有1的个数

int OneInInteger(int number){  int count = 0;  while(number){     number = number & (number - 1);    count++;  }  return count;}

anikan_yu的专栏 742

输入一个整型变量,求它二进制位中含有1的个数

C语言基础编程 &按位与操作符的应用 求一个整型变量的二进制表示中1的个数三种方法

sky_Mata的博客 2192

用循环的方法求一个十进制数对应二进制中含有1的个数

int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } x = 9999 时,x-1=9998,用二进制表示 10011100001111 10011100001110 当他们执行&运算

myKernel 1211

3. 计算输入数字的二进制表示中含有1的个数

#include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int main() { unsigned int x = 9; int countx = 0; while(x) { countx++; x &= (x-1); } printf("%d\n",...

weixin_42505877的博客 149

编程计算数字二进制中含有1的个数(32位机器为例)

得到二进制中数字含1的简单方法 了解数字的二进制位 我们知道数字在计算机中是以二进制形式存储的,其实数字是以补码的形式存储的,在此我们可以了解一下,关于三种”码” ,即就是 原码、 反码 、补码。数字有正负之分,正数的原码、反码、补码都是一样的,负数有所不同,如果我们想要得到一个负数的补码,我们先必须写出这个负数的原码,比如:-1其原码是(100…01),共32位数字,最高为是符号位1,表示...

YH98_666的博客 1535

看一个数据类型转换成二进制,含有“1”的个数

int calcBinaryOfOne(int x) { int countx = 0; while(x) { countx++; x = x & (x-1); } return countx; }

小鸟cc的博客 331

趣题:用位运算生成下一个含有k个1的二进制数(转载)

趣题:用位运算生成下一个含有k个1的二进制数(转载)  (转载自matrix67的专栏:http://blog.youkuaiyun.com/matrix67/archive/2008/09/24/4779921.aspx)     在所有8-bit的整数中,含有k个数字“1”的二进制数一共有C(8,k)个。给出其中的一个二进制数,你如何利用位运算快速找到下一个恰有k个“1”的数?例如,如果给

goal00001111的专栏 1183

求N!的二进制表示中最低位1的位置

题目第一种解法: /************************************************************************/ /* 判断N!的二进制数中最低位1的位置 解法一: 题目和上一题差不多,上一题是0的个数,这里是最低位1的位置,是类似的。 由于二进制中除以2能整除为0,所以,这个问题就是求二进制数种2个个数。*/ /*******

passion_wlz的专栏 2122
上一篇: 自己实现文本相似度算法(余弦定理)
下一篇: 深度优先遍历与广度优先遍历(c++二叉树算法实现)
Traveling_DING
博客等级 码龄12年 65粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值