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

Kiểm tra xem các bit trong phạm vi L đến R của hai số có phải là phần bù của nhau hay không trong Python

Giả sử chúng ta có hai số x và y và một phạm vi cho trước (trái, phải). Chúng ta phải kiểm tra xem tất cả các bit trong phạm vi từ trái sang phải trong cả hai số đã cho có phải là phần bù của nhau hay không. Chúng ta phải lưu ý rằng từ phải sang trái, vì vậy bit ít quan trọng nhất được coi là ở vị trí đầu tiên.

Vì vậy, nếu đầu vào là x =41 y =54 left =2 right =5, thì đầu ra sẽ là True, vì biểu diễn nhị phân của 41 và 54 là 101001 và 110110. Các bit trong phạm vi 2 đến 5 của x và y là "1001" và "0110" bổ sung cho nhau.

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

  • tạm thời:=x XOR y
  • trả về true khi tất cả các bit trong phạm vi (trái, phải) của nhiệt độ là 1, ngược lại là false

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

Ví dụ

def are_all_setbits_in_range(n, left, right):
   val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1)
   new_value = n & val
   if val == new_value:
      return True
   return False
def solve(x, y, left, right):
   temp = x ^ y
   return are_all_setbits_in_range(temp, left, right)
x = 41
y = 54
left = 2
right = 5
print(solve(x, y, left, right))

Đầu vào

41, 54, 2, 5

Đầu ra

True