C ++中范围的按位与(或&)

在这个问题上,我们得到两个整数值a和b。我们的任务是找到a到b按位和(&)范围。这意味着我们将必须找到a&a + 1&a + 2&…b-1&b的值。

让我们举个例子来了解这个问题,

输入− a = 3,b = 8

输出-0

解释- 3&4&5&6&7&8 = 0

为了解决该问题,一个简单的解决方案是从a开始,然后通过将a增加到b,按位查找所有数。

更有效的解决方案,

这是一个更有效的解决方案,可以使用-

步骤1-翻转b的LSB。

步骤2-比较数字与a和b,检查它是否在范围内,

步骤2.1-如果该数字大于其翻转的LSB增益。

步骤2.2-如果不大于,则数字=结果。

现在,让我们看看上面的算法在工作中-

示例-a = 3和b = 8。

解决方案-

步骤1 -b = 8(1000),翻转最小号LSB。该数字变为0000,即0

步骤2-0小于3,结果为0。

示例

现在,让我们看一下解决问题的代码,

#include <stdio.h>
int main(){
   long a, b;
   a = 3; b = 8;
   do{
      b -= (b & -b);
   }while(a < b);
   printf("%li", b);
}

输出结果

0