现在有两种比较好的方法求:一个整数的补码中1的个数; 1:int 类型的整数是32个比特位,该整数如果&1的话,如果最右边的数是1,则得到的数就是1,如果是0,得到的就是0了,大家可以多了解了解&这个符号的作用,它叫按位与,对应的二进制数只有都是1才得到1,否则为0; 那么现在可以判断最后一位是不是1,现在如果把32位都&1,则知道了补码的所有1的位数;现在可以用>>右移操作符,把32位数一一向右,都与1&,就可以得到32位中所有的1的个数; #include <stdio.h> int count_bit(int i) { int count = 0,j; for (j = 0; j < 32; j++) { if (1 == ((i >> j) & 1)) count++; } return count; } int main() { int i, ret; scanf("%d", &i); ret = count_bit(i); printf("%d", ret); return 0; } 第二种方法:这种方法是用了n&(n-1)会减少一个1,大家可以自己试试看,每次用这种方式都会少一个二进制的1; #include <stdio.h> int count_bit(int i) { int count = 0; while (i) { i = i & (i - 1); count++; } return count; } int main() { int i, ret; scanf("%d", &i); ret = count_bit(i); printf("%d", ret); return 0; }