题目

  1. 统计一个整数对应的二进制数的1的个数。输入一个整数(可正可负),输出该整数的二进制数中包含1的个数,按组合键Ctrl+Z结束。

思路分析

  • 正数在内存中存储的是原码,负数在内存中存储的是补码,无论是原码还是补码,我们统计的都是实际在内存中二进制数中1的个数,使用移位操作就可以实现。

代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n,a,con;//i控制循环次数,n存储输入的值,a储存n与1按位与的结果,con用来记录1的个数
    while(scanf("%d",&n) != EOF)
    {
        i=32;
        con=0;
        while(i--)
        {
            a=n&1;
            n=n>>1;
            if(1 == a)
            {
                con++;
            }

        }
        printf("%d\n",con);
    }
    system("pause");
}

执行结果
图片说明