这个用C语言很容易,以 %d 的形式把有符号数读入到一个unsinged中,这样计算机中保存的二进制序列就是其补码的序列了,这时再用位运算统计1的个数。

#include <stdio.h>

int main()
{
    unsigned x, cnt = 0;

    scanf("%d", &x);

    while (x) {
        cnt += x & 1;
        x >>= 1;
    }

    printf("%d\n", cnt);

    return 0;
}