#includeint number(unsigned int x)//首先绝对值不行 其次unsigned可以解决当时答疑的那个问题 { int count = 0; while (x)// m%1 m>>=1 也可以实现 { if (x % 2 == 1) { count++; } x = x / 2; } return count; } int main() { int a = 0;//求补码中1的个数(负数的时候原码1的个数会很多(补码也很多)) scanf("%d", &a); int ret = number(a); printf("%d", ret); return 0; } //m = m&(m-1)这个表达式会把二进制序列中最右边的1去掉 //2去掉最低位 %2得到最低位 10进制同理



