ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

按位与数字范围

前开发者教程 2020年3月30日

给定一个数字范围,您需要查找该范围内所有数字的按位和。

 

例:

 

[5, 7]

 

5、6、7的按位与为4。

 

一旦了解了以下概念,解决方案就非常简单:

 

让我们举个小例子,试着理解。

我们将按位找到&范围4、5、6、7中的一个。

 

按位与数字范围

 

如您所见,如果所有位均为1,将返回1。

 

再次考虑范围8、9、10、11、12

 

这里的模式也一样。您会看到,除了最高有效位以外,所有其他位均为零。

 

一旦解决方案可以一点一点地做&操作。但这不是有效的。

 

而我们唯一获得1的情况是数字m和n相同。

 

因此,我们可以做的是,可以将两个数字右移1,直到两个数字都相同。我们还应该跟踪已进行了多少轮班。

 

然后,当两个数字都相同时,我们可以向左移执行右移的次数。因此,我们得出了解决方案。

 

C ++解决方案

 

#include<iostream>
using namespace std;

int range_bitwise_and(int m, int n) 
{
    int shift = 0;
     
    while (m != n) 
    {
        shift++;
        m = m >> 1;
        n = n >> 1;
    }
 
return m << shift;
}

int main()
{
    int num_1 = 5;
    int num_2 = 7;

    cout<<"solution = "<<range_bitwise_and(num_1, num_2)<<endl;
}

输出:

 

solution = 4

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的
        <section class="l4LnssO"></section>

      • <video id="cMYwPN4" class="c12DDwG"></video>


        <address class="LzeJVoc"><aside class="VgSvntg"><address class="fFwyiRj"><legend class="lYMgDF6"></legend></address></aside></address>