求两个数对应二进制位不同的个数(深度剖析+补充例题)

简介: 求两个数对应二进制位不同的个数(深度剖析+补充例题)

前言:Hello!大家好,我是@每天都要敲代码;今天再给大家带来两道有趣的例题,在你接触这两道例题前,不妨去看一下这篇博客传送门,因为我感觉它们的思路是类似的,只不过玩法是不一样的;无论是怎么,只要我们把知识点掌握,类似的问题也就可以迎刃而解!!!



5a8f0799f2f64c4499b24620f6ea48fd.jpg

题目:求两个数对应二进制位不同的个数

方法1:利用>>运算符

解析:


既然我们需要求个数,所以最简单方法就是定义一个计数器count,之后我们可以思考,一定要想办法把两个数的每个二进制位取出来,怎么取出来呢?那就需要利用(右移)>>运算符;比如:两个数m和n,我们写一个循环看:((m>>i)&1) 与 ((n>>i)&1)是否相等,不等我们count++就可以了!


具体代码:


25f63a68387e4ef8901ca84b65afce2a.png


方法2:利用^然后&运算符

解析:


第二种方法就有意思了,我们定义好计数器count以后,怎么办呢?找不同,找不同!!是不是想到一个运算符^,相异得到1,相同是0;有了这个思路我们定义一个变量ret = m^n,这样ret中1的个数,实际上就是m和n中二进制位不同的个数。那么问题又来了,我们怎么得到一个数中二进制位为1的个数呢?这就需要我才开始推荐的那篇博客,里面有3种方法,这里我们就使用效率最高的算法(&与运算符)!


具体代码:


7c5ace8afcb0462cb6faab6bfbbb2a6e.png


总结:


有些小伙伴应该会提问,那如果两个都是负数,或者一个是正数一个是负数怎么办呢?我们不妨把m和n定义为无符号整型,unsigned int m、unsigned int n,这样即使有负数也是没问题的。这里就不在赘述,感兴趣的小伙伴不妨自己动手测试一下!


每日一题

有了上面的理解,我们不妨测试一下你的学习成果。题目:打印整数二进制的奇数位和偶数位

解析:


吸取上面的理解,我们还是写一个for循环,利用>>操作符去取出它的偶数位和奇数位,这题的难点在于我们要理清楚它移位的逻辑,移几位?范围的开始和结束?我们不妨通过画图的形式去理解:

00ffe4e949e1492f816e3b3a7f209659.png

543af7182ad6447bbaba43573fa1482b.png


具体代码:

8fafc6087418478c8b8dfdd779e7bf67.png

结语:

   以上就是今天的学习内容,每天学习一点点,慢慢积累沉淀,相信最终我们都会变得强大;接下来给大家分享3张校园的美图,看一下美景;放松一下眼睛吧!


71726b6673654db698e1b76b92e9a71a.jpg

b05b0252760942b9adabacab3528873b.jpg

4283f78e9fca4746a887217ce3f5a9ac.jpg


相关文章
|
存储 Java
AQS(AbstractQueuedSynchronizer,队列同步器)源码解读
AQS(AbstractQueuedSynchronizer,队列同步器)源码解读
|
存储 Python
海明距离(Hamming Distance)
海明距离(Hamming Distance)是用来衡量两个二进制数之间差异程度的指标,它表示两个二进制数之间最多有多少个比特的差异。海明距离可以用于衡量数据传输或存储中的错误率,以及检测噪声干扰。 海明距离的计算方法是:对于两个 n 位二进制数,将它们进行逐位比较,如果对应位上的数字不同,则计算距离时增加 1。然后将所有位上的距离加在一起,得到海明距离。
3198 1
|
存储 算法 NoSQL
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
1099 0
【数据结构和算法】散列表的查找算法(开放地址法,链地址法)
Java——接口(interface)(概念理解+应用举例)
Java——接口(interface)(概念理解+应用举例)
2014 0
Java——接口(interface)(概念理解+应用举例)
|
编解码 达摩院 监控
阿里云 Elasticsearch 向量检索,轻松玩转人脸识别、搜索推荐等29个业务场景
简介:我们知道,市面上有不少开源的向量检索库供大家选择使用,例如 Facebook 推出的 Faiss 以及 Nswlib,虽然选择较多,但业务上需要用到向量检索时,依旧要面对四大共性问题。
11409 1
阿里云 Elasticsearch 向量检索,轻松玩转人脸识别、搜索推荐等29个业务场景
|
安全 Java API
ArrayList 全面详解
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文详细解析了Java集合框架中的ArrayList,包括其定义、特点、成员变量、构造函数、API、主要方法和扩容机制等。欢迎留言交流。
|
Linux Perl
在Linux中,如何停止正在运行的进程?
在Linux中,如何停止正在运行的进程?
|
网络性能优化 定位技术 C++
跨地区远程访问如何更快、更稳、更可靠:贝锐蒲公英智能选路
贝锐蒲公英云智慧组网采用自研智能选路技术,可根据实时网络状况自动选择最优路径,大幅降低延迟并提升传输速率。相较于传统单线模式下数据必须经由单一服务器转发导致高延迟与无备份线路的问题,蒲公英通过全球分布式节点与SD-WAN技术实现了智能实时导航能力。实测显示,智能选路可使通讯延迟降低5倍、传输速率提升百倍。该技术基于多云服务商的主干网络与FullMesh架构,能自动避开拥堵路径并确保网络可用性,即使面对线路故障也能自动切换,提供更快速、稳定和可靠的跨地区远程访问体验。
814 3
跨地区远程访问如何更快、更稳、更可靠:贝锐蒲公英智能选路
|
前端开发 JavaScript 开发者
复制粘贴,动画即成:CSS手风琴效果,快速实现!
复制粘贴,动画即成:CSS手风琴效果,快速实现!

热门文章

最新文章