У меня есть функция, которая принимает целое число и возвращает набор, который состоит из степеней 2, сумма которых равно значение входного сигнала:Looping назад через высокие биты порядка в ряде
def bin_set(n):
b = set()
while n:
hbit = 1 << n.bit_length()-1
b.add(hbit)
n -= hbit
return b
Так рассчитать старший бит числа и добавьте его в набор, но какое значение n
следует отправить на следующую итерацию цикла? Я использовал n = n-hbit
из-за состояния while
, и это как-то работает, но я уверен, что это неправильный подход.
Есть ли другой способ сделать это, возможно, с другим циклом и без логарифмов/бит twiddling/bit_length() или это единственный подход?
Спасибо, мысль об использовании XOR, чтобы отменить бит, мне так или иначе не пришла в голову, мне это нравится намного лучше! Я фактически протестировал второй цикл, и мне кажется, что есть хотя бы еще одна итерация, хотя я не могу придумать хороший худший случай. – cbq
@cbq: худший случай: очень большое целое со всеми установленными битами. '19342813113834066795298815' например. –