在 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告