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

c++server side programmingprogramming更新于 2024/9/1 7:39:00

假设我们有一个范围 [m, n],其中 0 <= m <= n <= 2147483647。我们必须找到此范围内所有数字的按位与,包括 0 和 1。因此,如果范围是 [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

相关文章