C++计算输入数据对应二进制中1的个数。

代码

1.使用C++中bitset类模板,计算

#include
#include
#include
using namespace std;
int main()
{
    int c;
    cout<<"Input  int data: "<cin>>c;
    bitset<sizeof(int)*8> a(c); //bitset输入数据以二进制的形式初始化a
    cout<"\n";//bitset操作,a中置为1的个数
    return 0;
}

2.使用经典java算法

#include
#include
#include
using namespace std;
int getcount_one(int &a);
int main()
{
    int data;
    cout<<"Input int data: "<cin>>data;
    cout<return 0;
}
int getcount_one(int &a)
{
    int num = 0;  
    while(a)  
    {  
        a &= (a-1);  //输入的数据a,对应二进制最右边为1是第k位,则a-1后,第k位右边全为1,第k位为0,第k位左边数据保持不变。一次找到一个1,num++。
        num++;
    }

    return num;
}

3.利用移位思想试试

int getcount_one(int &a)
{
    int num = 0;  
    while(a)  
    {  
        if((a&1)==1)num++;  
        a>>=1;//向右移一位,思想很简单,对应二进制最后一位是1,num+1,不是1就代表最后一位是0,循环右移一位
    }

    return num;
}

你可能感兴趣的:(c++)