Python计数设置范围内的位?

给定的正数转换为二进制数时,具有一定的置位位数。二进制数中的设置位用1表示。在本文中,我们将看到如何在给定数字中将其转换为二进制值后获取其设置位的数量。

使用bin和切片

在下面的示例中,我们采用一个数字并应用bin函数来获取二进制值。然后,我们将其切片以删除添加到二进制数的前缀,然后应用range函数获得setbit的coutn。

例子

def SetBits_cnt(n, l, r):
   bin_val = bin(n)

   # Remove '0b' prefixed in bin_val conversion
   bin_val = bin_val[2:]
   print(bin_val)
   # 反向串
   bin_val = bin_val[-1::-1]

   # count all set bit '1' starting from index l-1
   print(len([bin_val[i] for i in range(l - 1, r) if bin_val[i] == '1']))

SetBits_cnt(83,1,6)

输出

运行上面的代码给我们以下结果-

1010011
3

按位使用

按位运算符也可用于获取设置位。在下面的示例中,我们首先应用按位运算符,将范围考虑在内,然后将其传递给仅计算设置位的另一个函数。

例子

def trackBitsInRange(n, l, r):
   # 使用按位运算符
   bit_num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)
   # 按位运算后,对设置的位进行计数
   return trackSetBits(n & bit_num)

def trackSetBits(n):
   count = 0
   while (n):
      n &= (n - 1)
      count = count + 1
   return count

print(trackBitsInRange(83,1,6))

输出

运行上面的代码给我们以下结果-

3