Двоичное суммирование Python

Просматривая код SageMath, я наткнулся на следующий фрагмент:

bits = n - sum(n.digits(2))

Поскольку я понятия не имел, что сделал digits, я попытался сделать это со значением n = 5:

n = 5
print(n.digits(2))
[1, 0, 1]

И если я запускаю полную строку, результат (довольно очевидно)

n = 5
print(sum(n.digits(2)))
2

Как я мог добиться этого в чистом питоне? Преобразование в строки и обратно очень медленное, поэтому я бы хотел их избежать. Есть ли быстрое решение для этого?


person Bernardo Meurer    schedule 05.01.2016    source источник
comment
Вы ищете количество битов до 1 в числе?   -  person FunkySayu    schedule 05.01.2016
comment
Сумма всех отдельных битов числа (следовательно, количество единиц в битовом представлении числа). например: 5 -> 101 -> 1+0+1 -> 2   -  person Bernardo Meurer    schedule 05.01.2016


Ответы (1)


Если вы ищете количество ненулевых битов:

bin(5).count("1")
person FunkySayu    schedule 05.01.2016
comment
Я думаю, что он будет работать еще лучше, если вы удалите [2:], который создает новый список. - person Delgan; 05.01.2016