给定一个整数n,我想翻转该数字在二进制表示中范围为lower到upper的所有位。 为此,我执行以下操作[bit_string是一个包含1和0的字符串,表示n的二进制表示形式]
for i in range(lower,upper+1):
n ^= (1 << len(bit_string)-1-i) #Toggle the ith bit
然后,我还需要确定在给定范围内(例如从下限到上限),有多少位被设置。我的代码如下:
number_of_ones = 0
for i in range(lower,upper+1):
if(n & (1 << len(bit_string)-1-i)): #Check the ith bit
number_of_ones+=1
但是,如果n非常大,我认为这些算法会变得很慢。有没有一种方法可以使这两个操作更快/更有效?
谢谢