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

Bitwise và (hoặc &) của một dải ô trong C ++

Trong bài toán này, chúng ta được cho hai giá trị nguyên a và b. Và nhiệm vụ của chúng ta là tìm bitwise và (&) của phạm vi từ a đến b . Điều này có nghĩa là chúng ta sẽ phải tìm giá trị của a &a + 1 &a + 2 &… b-1 &b.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào - a =3, b =8

Đầu ra - 0

Giải thích - 3 &4 &5 &6 &7 &8 =0

Để giải quyết vấn đề, một giải pháp đơn giản là bắt đầu từ a và tìm theo chiều dọc bit và của tất cả các số bằng cách tăng một đến b.

Giải pháp hiệu quả hơn,

Đây là một giải pháp hiệu quả hơn, điều này có thể được thực hiện bằng cách sử dụng -

Bước 1 - Lật LSB của b.

Bước 2 - So sánh số với a và b, kiểm tra xem nó có nằm trong phạm vi không,

Bước 2.1 - nếu con số lớn hơn một lần lật thì mức tăng LSB của nó.

Bước 2.2 - nếu nó không lớn hơn một thì number =result.

Bây giờ, hãy Hãy xem thuật toán ở trên đang hoạt động -

Ví dụ - a =3 và b =8.

Giải pháp -

Bước 1 - b =8 (1000), lật LSB là cái duy nhất trong số. Số trở thành 0000, tức là 0

Bước 2 - 0 nhỏ hơn 3, kết quả là 0.

Ví dụ

Bây giờ, hãy xem mã để giải quyết vấn đề,

#include <stdio.h>
int main(){
   long a, b;
   a = 3; b = 8;
   do{
      b -= (b & -b);
   }while(a < b);
   printf("%li", b);
}

Đầu ra

0