Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Bitwise AND ของช่วงตัวเลขใน C++


สมมติว่าเรามีช่วง [m, n] โดยที่ 0 <=m <=n <=2147483647 เราต้องหาค่าบิต AND ของตัวเลขทั้งหมดในช่วงนี้ ดังนั้นหากช่วงคือ [5, 7] ผลลัพธ์จะเป็น 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ผม :=0

  • ในขณะที่ m ไม่ใช่ n ดังนั้น

    • m :=m/2, n :=n / 2, เพิ่ม i ขึ้น 1

  • กลับ m หลังจากขยับไปทางซ้าย i ครั้ง

ตัวอย่าง(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