在 Python 中查詢給定範圍內的數字範圍的按位 AND 的程式
假設我們有兩個值 start 和 end,我們必須找到區間 [start, end](包括 start 和 end)中所有數字的按位 AND。
所以,如果輸入類似 start = 8 end = 12,則輸出為 8 在二進位制中為 1000,12 在二進位制中為 1100,所以 1000 AND 1001 AND 1010 AND 1011 AND 1100 為 1000,即 8。
要解決此問題,我們會執行以下步驟 -
- n := end - start + 1
- x := 0
- 範圍為 31 到 0,逐個減小 b,執行
- 如果 2^b < n,則
- 退出迴圈
- 如果 2^b AND start AND end 不為零,則
- x := x + (2^b)
- 如果 2^b < n,則
- 返回 x
示例
讓我們瞭解以下實現以獲得更好的理解 -
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))
輸入
8, 12
輸出
8
廣告