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

Chương trình tìm bitwise AND của phạm vi số trong phạm vi đã cho bằng Python

Giả sử chúng ta có hai giá trị bắt đầu và kết thúc, chúng ta phải tìm AND theo chiều dọc của tất cả các số trong phạm vi [bắt đầu, kết thúc] (bao gồm cả hai giá trị).

Vì vậy, nếu đầu vào giống như start =8 end =12, thì đầu ra sẽ là 8 là 1000 trong nhị phân và 12 là 1100 trong nhị phân, vì vậy 1000 VÀ 1001 VÀ 1010 VÀ 1011 VÀ 1100 là 1000 là 8.

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

  • n:=end - start + 1
  • x:=0
  • cho b trong phạm vi 31 đến 0, giảm 1, thực hiện
    • nếu 2 ^ b
    • ra khỏi vòng lặp
  • nếu 2 ^ b VÀ bắt đầu VÀ kết thúc là khác 0, thì
    • x:=x + (2 ^ b)
  • trả về x
  • Ví dụ

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

    def solve(start, end):
       n = end - start + 1
       x = 0
       for b in range(31, -1, -1):
          if (1 << b) < n:
             break
          if (1 << b) & start & end:
             x += 1 << b
       return x
    
    start = 8
    end = 12
    print(solve(start, end))

    Đầu vào

    8, 12

    Đầu ra

    8