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
广告