Computer >> Máy Tính >  >> Lập trình >> C ++

Bitwise AND của Dải số trong C ++


Giả sử chúng ta có một phạm vi [m, n] trong đó 0 <=m <=n <=2147483647. Chúng tôi phải tìm theo từng bit AND của tất cả các số trong phạm vi này, bao gồm cả. Vì vậy, nếu phạm vi là [5, 7], thì kết quả sẽ là 4.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • i:=0

  • trong khi m không phải là n, thì

    • m:=m / 2, n:=n / 2, tăng i lên 1

  • trả về m sau khi dịch chuyển sang trái i lần.

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

5
7

Đầu ra

4