二进制中1的个数

输入一个十进制数,得出它的二进制中有几个1。如9的二进制表示为1001,有2个1。

书中有3种方法来解决这个问题,我在这就说下最好的一种。

这里用到一个技巧就是消除二进制中最右的1。例如数字1100,我们先把它减1,即得1011,然后我们把1100与1011做与运算,得到1000。

那么我们循环消除1,直到消除全部,消除几次就有几个1。

代码如下:

int NumberOf1(int n)
{
    int num=0;
    
    while( n !=0 )
    {
        ++num;
        n = n&(n-1);
    }
    return num;
}

消除1这个技巧非常有用,例如如何用一个语句判断一个整数是不是2的整数次方,经过观察凡是2的整数次方的数二进制表示必定只有一个1。我们只要用消除1的这个技巧消除一次来判断这个数是否变成0就可以判断这个数了。

 

posted @ 2013-03-02 21:55  没离开过  阅读(137)  评论(0)    收藏  举报