C++ 如何确保位计数方法同时使用32位和64位整数输入

C++ 如何确保位计数方法同时使用32位和64位整数输入,c++,bit,C++,Bit,我需要确保通过0位计数方法num0bits(int I)可以同时处理32位和64位输入?(例如,在int为32位的机器上,num0bits(10)应返回30位;如果int为64位,则应返回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);

我需要确保通过0位计数方法num0bits(int I)可以同时处理32位和64位输入?(例如,在int为32位的机器上,num0bits(10)应返回30位;如果int为64位,则应返回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;
}



无符号整数num1位(整数i)
{
无符号整数u=i;
无符号整数ans=0;
而(u>0){
ans+=(u&1);
u>>=1;
}
返回ans;
}
无符号整数0位(整数i){
if(sizeof(i)==4){
返回32位-num1位(i);
}否则{
返回64位-num1位(i);
}
}
int main(){
int输入;
while(标准::cin>>输入){
无符号整数位=整数位(输入);
无符号整数零位=num0位(输入);

std::cout在您的平台上,
int
即使在64位模式下也是32位的。您当前的方法不起作用吗?它可能需要一些改进来处理不太典型的大小,但总体上想法是正确的。该方法起作用。我只是不确定如何确保我能够满足它必须在32位和64位系统上工作的标准。add like@AProgrammer在他对当前运行该程序的操作系统的评论中说,在64位模式下,int是32位的,因此可以使用
无符号int num0bits(int i){return CHAR_bit*sizeof(int)-num1bits(i);}