求整数的二进制表示1的个数

题目:输入一个整数,求该整数的二进制表达中有多少个1。

举例:输入10,其二进制表示为1010,有两个1,因此输出2。

答:

#include "stdafx.h"
#include <iostream>

using namespace std;

//只限于正数(输入负数会陷入死循环)
int CountNonnegativeOneNumber(int n)
{
    int count = 0;
    while (n)
    {
        if (n & 1)
        {
            count++;
        }
        n = n>>1;
    }
    return count;
}

//负数与正数均可
int CountOneNumber(int n)
{
    int count = 0;
    unsigned int flag = 1;
    while (flag)
    {
        if (n & flag)
        {
            count++;
        }
        flag = flag<<1;
    }
    return count;
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout<<CountNonnegativeOneNumber(110)<<endl;
    cout<<CountOneNumber(110)<<endl;
    return 0;
}

运行界面如下:

posted @ 2012-08-25 20:11  venow  阅读(267)  评论(0编辑  收藏  举报