32 до 0 оба включительно - всего 33 бита, вы здесь на единицу:
for(int i=32;i>=0;i--){
if(n&(1<<i)) ans++;
std::cout << i << "\n";
}
Я добавил cout
, который позволяет вам это проверить. Вместо этого вы должны начать цикл с 31, то есть
for(int i=31;i>=0;i--){
Обратите внимание, что std::bitset
очень удобно, когда вы заботитесь о битовом представлении чисел.
PS: На самом деле, я удивляюсь, почему вы изменили цикл. Проблемы такого рода менее вероятны, когда вы пишете более распространенные for (int i=0;i<32;++i)