потеряет 1. Записывая U как двоичную сумму, мы теряем 1 для каждого бита, установленного в 1.

ервью мне задали следующий вопрос:

int foofoo(unsigned int u) {
    unsigned int foo = u;
    do{
        u = u/2;
        foo -= u;
    }while(u > 0);
    return foo;
}

Меня попросили рассказать, что делает эта функция, и я смог обнаружить, что она подсчитывает количество установленных битов в значении unsigned int, но я не смог доказать это, может кто-то может?