请实现一个函数,输入一个整数,输出该属二进制表示中1的个数。例:9的二进制为1001,输出2.

方法一:

把这个数转化为二进制,用该数最小位和1做&运算判断最小位是否为1,每判断一次,将该数往右移一位,或将1网左移一位。代码如下:
int One (int n)
{
    int count=0;
    for(int i=0;i<32;i++)//int类型有32位
    {
        if(n&1)
        {
            count++;
        }
        n=n>>1;//或1=1<<1;
    }
    return n;
}
方法二:
把这个数转化为二进制,将该数与该数减1做&运算,使用一个计数器count,记录做了count次,count为所求结果。
原理:设一个二进制数n最右边的1位于第m位,当n-1后,m和m位之后的所有数都会变为0,m位之前的所有数都会保持不变,所以这个整数有几个1,这样的操作就会做几次。
举个例子:9的二进制为1001,9-1=8二进制为1000,1001&1000=1000,1000-1=0111,1000&0111=0。这样的操作做了两次,所以9有2个1.代码如下:
int Two(int n)
{
    int count=0;
    while(n)
          {
              count++;
              n=n&(n-1);
          }
    return count;
}