在 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

示例

让我们了解以下实现以获得更好的理解 -

Open Compiler
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

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

8

更新时间: 16-Oct-2021

241 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告