用 Python 编写程序,在给定范围内查找数字范围的按位与

pythonserver side programmingprogramming更新于 2026/1/11 8:44:17

假设我们有两个值 start 和 end,我们必须找到范围 [start, end](包括两者)内所有数字的按位与。

因此,如果输入为 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,减少 1,执行
    • 如果 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

相关文章


有用资源