在 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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP