0
点赞
收藏
分享

微信扫一扫

C语言:如何统计一个数的二进制形式中有多少个1?

炽凤亮尧 2022-02-04 阅读 60

代码如下:

int main()
{
    int n=0;
    scanf("%d",&n);                  //输入一个数字
    int count =0;                       //计数器:用来统计1的个数
    while(n)
    {
        n=n&(n-1);                     //此为核心
        count++;
     } 
    printf("%d",count);             //打印统计到的1的个数
    return 0;
}

核心代码的解释:

①假设n=15

(1)第一次操作

n: 00000000000000000000000000001111

n-1:00000000000000000000000000001110

对n和n-1进行按位与操作(&)

得到的结果为:00000000000000000000000000001110

与n相比,得到的结果中1的个数少了一个1。

(2)第二次操作

此时,n:00000000000000000000000000001110

计算n-1:00000000000000000000000000001101

对n和n-1进行按位与操作(&)

得到的结果为:00000000000000000000000000001100

与n相比,得到的结果中1的个数少了一个1。

                        .

                        .

                        .

因此,进行推论:每进行一次这样的操作,即可使n的二进制形式中少一个1。据此。我们可以通过while循环的形式进行统计,在抹除掉最后一个1的时候,n变为了0。因此while循环的条件可以设置为n。

②假设n=-1

(1)第一次操作

n:11111111111111111111111111111111

n-1:11111111111111111111111111111110

对n和n-1进行按位与操作(&)

得到的结果为:11111111111111111111111111111110

与n相比,也是减少了一个1。这与正数相一致。

综上所述:此代码对正数和负数都有效。

举报

相关推荐

0 条评论