📅  最后修改于: 2023-12-03 15:04:10.486000             🧑  作者: Mango
在Python中,可以使用位运算符来对二进制数进行操作。其中包括与运算&
、或运算|
、异或运算^
、取反运算~
等。本文将介绍如何在Python中计算一个给定范围内的所有已设置的位。
给定一个正整数n
和范围[l, r]
(其中1 <= l, r <= n
),请计算n
的二进制表示中,位于范围[l,r]
内并且已设置为1的位数。
我们可以使用bin
函数将n
转换为二进制字符串,并对其进行切片来提取指定范围内的子串。然后使用位运算符&
将其与一个全1的二进制数进行与运算。这个全1的二进制数可以使用位运算符<<
和-1
来生成。得到的结果就是指定范围内已设置的位。
接下来,我们可以使用bin
函数再将这个结果转换为二进制字符串,并数一数其中有多少个1
即可。具体实现如下:
def count_set_bits(n: int, l: int, r: int) -> int:
# 将 n 转换为二进制字符串
binary_str = bin(n)[2:]
# 对字符串进行切片,提取指定范围内的子串
sub_str = binary_str[-r: -l + 1]
# 将子串转换为二进制数,并与全1的二进制数进行与运算
result = int(sub_str, 2) & ((1 << (r - l + 1)) - 1)
# 将结果转换为二进制字符串,并数一数其中有多少个1
return bin(result).count('1')
使用下面的测试代码可以检验上述函数是否正确。你也可以根据需要自行编写更多的测试用例。
assert count_set_bits(10, 2, 3) == 1
assert count_set_bits(16, 1, 4) == 1
assert count_set_bits(128, 2, 7) == 5
assert count_set_bits(15, 1, 4) == 4
assert count_set_bits(8, 1, 4) == 1
本文介绍了如何在Python中计算一个给定范围内的所有已设置的位。具体方法是将指定范围内的子串转换为二进制数,并使用位运算符&
对其进行与运算。得到的结果再转换为二进制字符串,并数一数其中有多少个1
。