Как обеспечить метод подсчета битов при работе с 32- и 64-разрядными целочисленными входами - PullRequest
0 голосов
/ 20 ноября 2019

Мне нужно убедиться, что 0-битный метод подсчета num0bits (int i) будет работать как с 32, так и с 64-битными входами? (Например, на машине с 32-разрядным значением int num0bits (10) должно вернуть 30; если 64-разрядное значение int - 62).

Запуск x86_64 Ubuntu 18.04

unsigned int num1bits(int i)
{
    unsigned int u = i;
    unsigned int ans = 0;
    while (u > 0) {
    ans += (u&1);
    u >>= 1;
    }
    return ans;

}

unsigned int num0bits(int i){

       if ( sizeof(i) == 4 ){
         return 32 - num1bits(i);
}else{
      return 64 - num1bits(i); 

}
}


int main(){

int input; 

while (std::cin >> input){

unsigned int onebits  = num1bits(input); 
unsigned int zerobits = num0bits(input);


std::cout << "You entered " << input << '\n'; 
std::cout << "There are " << onebits << " 1 bits set " << '\n';
std::cout << "There are " <<  zerobits << " 0 bits set " << '\n';

}
return 0;
}



Вы ввели 23 Установлено 4 1 бита Установлено 28 0 бит

Как проверить наличие 64-битных входов?

...