Python 在范围内统计设定位?


给定一个正数,当转换为二进制时,有一系列设定位。二进制数中的设定位由 1 表示。在本文中,我们将了解如何在将给定数字转换为二进制值后,获得该数字中设定位数。

使用 bin 和切片

在以下示例中,我们取一个数字并应用 bin 函数以获取二进制值。然后我们对它进行切片以删除添加到二进制数中的前缀,然后应用 range 函数以获得设定位的计数。

示例

 在线演示

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)
   # reverse string
   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):
   # using bitwise operator
   bit_num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)
   # After bitwise operation count the set bits
   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

更新于: 12-Jan-2021

220 次浏览

开启您的 职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.