Подсчитать количество единичек в двоичной форме числа

Задание такое:

задаётся число в десятичной форме, нужно подсчитать количество единичек в его двоичной.(число 13 - 3 единички, 12 - 2 единички)

Написала небольшой такой код, с нечетными подсчитывает правильно, с четными всегда ноль. В чем проблема, не подскажете?

#include<bits/stdc++.h>
using namespace std;

int main() {
  int a, b, c, i;

  cin >> a;
  c = a;
  i = 0;

  while(c > 1){
       b = a % 2;
       c = c / 2;

       if(b == 1){
          i = i + 1;
       }         
  }
  cout << i;

  return 0;
}

Ответы (3 шт):

Автор решения: Harry

Ну что ж вы все время смотрите, есть ли единичка в a, а уменьшаете c? :)

А вообще - замените весь ваш цикл while вот этим:

for(;c; c >>= 1) i += c&1;

И еще - лучше использовать не int, а unsigned int.

А вообще этот вопрос очень детально разобран здесь - не пожалейте времени, посмотрите...

→ Ссылка
Автор решения: Никита Самоуков
#include<bits/stdc++.h>

using namespace std;

int main() {

  int a;

  cin >> a;

  int i = 0;

  while(a >= 1){

       if(a % 2 == 1){

          i = i + 1;

       }    

       a = a / 2;     
  }

  cout << i;

  return 0;

}
→ Ссылка
Автор решения: HolyBlackCat

В C++20 для этого есть стандартная функция:

#include <bit>
#include <iostream>

int main()
{
    unsigned int a;
    std::cin >> a;
    std::cout << std::popcount(a) << '\n';
}
→ Ссылка