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 开始,通过增加 1 到 b 来找到所有数字的按位与。

更有效的解决方案:

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

**步骤 1** − 反转 b 的最低有效位 (LSB)。

**步骤 2** − 将该数字与 a 和 b 进行比较,检查它是否在范围内:

**步骤 2.1** − 如果数字大于 a,则再次反转其 LSB。

**步骤 2.2** − 如果它不大于 a,则数字 = 结果。

现在,让我们看看上面的算法是如何工作的:

**示例** − 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

更新于:2020年8月5日

149 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告