在 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)
  • 返回 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

更新時間: 16-Oct-2021

241 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告