Мне нужно убедиться, что 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-битных входов?