在 Python 中檢查兩個數字的 L 到 R 範圍內的位元位是否互為補碼


假設我們有兩個數字 x 和 y,以及一個給定的範圍 (left, right)。我們需要檢查這兩個給定數字在 left 到 right 範圍內的所有位元位是否互為補碼。需要注意的是,從右到左,所以最低有效位被認為是在第一個位置。

因此,如果輸入像 x = 41 y = 54 left = 2 right = 5,那麼輸出將為 True,因為 41 和 54 的二進位制表示分別為 101001 和 110110。x 和 y 在 2 到 5 範圍內的位元位分別是“1001”和“0110”,它們互為補碼。

為了解決這個問題,我們將遵循以下步驟:

  • temp := x XOR y
  • 當 temp 在 (left, right) 範圍內的所有位元位都為 1 時返回 true,否則返回 false。

讓我們看看下面的實現,以便更好地理解:

示例

 線上演示

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))

輸入

41, 54, 2, 5

輸出

True

更新於:2020-12-30

110 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.