【剑指offer】——二进制中1的个数

题目:

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解答:

一、将这个数进行位操作(有益处风险)

#include<stdio.h>

int Number1(int n)
{
    int count=0;

    while(n)
    {
        if(n&1)
            count++;
        n=n>>1;
    }
    return count;
}

int main()
{
    printf("%d\n",Number1(15));
    return 0;
}

二、借助flag,进行位操作(效率不高)

#include<stdio.h>

int Number1(int n)
{
    int count=0;
    unsigned int flag=1;
    while(flag)
    {
        if(n&flag)
            count++;
        flag=flag<<1;
    }
    return count;
}

int main()
{
    printf("%d\n",Number1(15));
    return 0;
}

三、利用减法

#include<stdio.h>

int Number1(int n)
{
    int count=0;

    while(n)
    {
        ++count;
        n=(n-1)&n;
    }

    return count;
}

int main()
{
    printf("%d\n",Number1(15));
    return 0;
}

发布了160 篇原创文章 · 获赞 316 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/ShawnWang1994/article/details/99644492