📜  Python |计算范围内的设置位(1)

📅  最后修改于: 2023-12-03 15:04:10.486000             🧑  作者: Mango

Python | 计算范围内的设置位

在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