求一个整数存储在内存中的二进制中1的个数;例如15有4个1(三种方法详解)

简介: 求一个整数存储在内存中的二进制中1的个数;例如15有4个1(三种方法详解)

前言:Hello!大家好,我是@每天都要敲代码;今天就划水一篇;再给大家带来一道有趣的例题,我目前知道的有3种方法,今天将一一呈现给兄弟们;欢迎大家一起学习!!!


c3263df6a1e7497eb6af74d1b97dc5ad.jpg

方法1:暴力求解法

解析:


我们都知道数据在计算机中是以二进制码的形式存储的,无非就是0和1;比如数字15的二进制形式就是1111;我们怎样才能得到它有几个1呢?当然取出%2取出最后一位,与1进行比较;然后在c除2继续看一位,依次类推,直到最后结果为0就结束。


具体代码:


52b4958bc32e4749bd20bc87cb95903a.png

代码分析:

   我们来分析一下这个代码:


82d0b2f457a54ee3b53aac13356b7ec7.png


%2和/2其实就类似于%10和/10一个道理;这里我只提醒一点:就是我们把n定义为无符号整型unsigned int;为了就是这个代码也可以计算负数;


   例如:n=-1如果是有符合数n % 2 == -1不满足;然后n= n / 2 结果就为0了跳出循环;


   但是如果定义为无符号数呢?


   -1在计算机中存储是补码的形式存储的就是111111.......11(32个1);当做无符号数来看,原码和反码、补码都是一样的,所以原码也就是32个1,打印出来当然就不是0了!!!  


方法2:利用移位运算符>>

解析:


我使用的是VS2019(32位);方法2就是取出每一位与1相与;如果原来二进制位是0,得到的就是0;如果原来二进制位是1,得到的就是1,然后count++;那么我们不妨一下个循环,让n进行移位,从不移位到移31位结束,下面看具体代码:


具体代码:



115de71859dc41c8a8265d50668dc901.png

5de4ec90fe8f49a597f564b8608e3a12.png

方法3:(&)与运算

解析:


    方法3是这道题的最优解法,有多少个二进制1,实际上就循环了多少次!!!我个人感觉确实很难想出来,怎么处理呢?我们不是不断通过n = n&(n-1)进行操作的;原来说起来比较麻烦,我们不妨通过画图的形式去理解:


2b95bfc1368341cb803f892850aa2222.png



我们发现我们没执行一次n&(n-1)就会少一个1,所以它需要循环的次数是和n所用的1的个数是有关的,是三种方法最优的!!!


具体代码:


73532209e06548acb6644423b4e2acb6.png

总结:

     以上就是今天的内容,把这道题拿出来分析,我个人感觉是非常有必要的;我们首先是从最简单最容易的方法入手,然后发散思维,去寻找有没有更优的方法去解决,这样才会使我们慢慢成长;希望这个题目对你有所帮助;一起学习,共同进步!!!


3109d1e4e12b4d61853178067ee408c7.jpg

相关文章
|
2天前
|
存储 算法
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
【三种方法】求一个整数存储在内存中二进制中的1的个数附两道课外练习题
7 0
|
2天前
|
存储
数据在内存中的存储之整数存储
数据在内存中的存储之整数存储
8 0
|
9天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
19天前
|
存储 C语言
数据在内存中的存储2
数据在内存中的存储2
|
19天前
|
存储 编译器
数据在内存中的存储1
数据在内存中的存储
|
1月前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1
|
2月前
|
存储 编译器 C语言
C语言:数据在内存中的存储形式
C语言:数据在内存中的存储形式
|
1月前
|
存储 C语言
C语言--------数据在内存中的存储
C语言--------数据在内存中的存储
26 0
|
30天前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
16 0
|
1月前
|
存储 Windows 容器
浮点数在内存中的存储
浮点数在内存中的存储
18 2