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ủatempcó đề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