C++ 中数字范围的按位 AND


假设我们有一个范围 [m, n],其中 0 <= m <= n <= 2147483647。我们必须找出此范围内所有数字的按位 AND,包括范围本身。因此,如果范围是 [5, 7],则结果将为 4。

为了解决此问题,我们将按照以下步骤进行 -

  • i := 0

  • 当 m 不等于 n 时,

    • m := m/2,n := n / 2,将 i 增加 1

  • 左移 i 次后返回 m。

示例 (C++)

让我们看看以下实现以获得更好的理解 -

 实时演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int rangeBitwiseAnd(int m, int n) {
      int i = 0;
      while(m != n){
         m >>= 1;
         n >>= 1;
         i++;
      }
      return m << i;
   }
};
main(){
   Solution ob;
   cout << (ob.rangeBitwiseAnd(5,7));
}

输入

5
7

输出

4

更新于: 02-05-2020

788 次浏览

启动你的 职业

完成课程以获得认证

开始
广告