Я бы использовал фактический подсчет, а не хаки на уровне битов, которые используют представление чисел, которые будут и чувствовать себя безопаснее, и будут более чистыми и понятными. Возможно, медленнее, конечно, но это довольно неплохой компромисс, особенно когда никто ничего не знает об ожидаемых результатах.
Для этого просто напишите код для подсчета числа в 1 бит, наиболее простое решение обычно сводится к циклу.
ОБНОВЛЕНИЕ: Учитывая (странные и раздражающие) ограничения, мой ответ, вероятно, будет развернуть цикл, данный в "наивном" решении на bithacks страница. Это было бы не красиво, но тогда я мог бы сделать что-нибудь полезное. :)