在Python中找到给定范围内一组数字的按位与

在Python中找到给定范围内一组数字的按位与

假设我们有两个值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
  • for b in range 31 to 0, decrease by 1, do
    • 如果2 ^ b < n,则
      • 从循环中退出
    • 如果 2 ^ b AND start AND end 非零,则
      • x:= x +(2^b)
  • return 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程