Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra bit trong khoảng L-R của hai số có bù nhau trong Python

Cho hai số x, y và khoảng (left, right). Kiểm tra xem các bit từ vị trí left đến right (đếm từ bit thấp nhất là 1) của hai số có phải bù nhau (complement) hay không.

Ví dụ: x=41 (101001), y=54 (110110), left=2, right=5 → bit 2-5 của x: 1001, của y: 0110 → bù nhau → True.

Giải thuật

  • Tính temp = x XOR y.
  • Kiểm tra xem tất cả các bit trong khoảng (left, right) của temp có đều bằng 1 không (dùng mặt nạ bit).

Mã 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