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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP