*返回一个数的二进制表达中1的个数。*

#include
int main(){    unsigned int i;    scanf("%d",&i);    printf("%d的二进制表达中有 %d 个1",i,count_one_bits(i));    return 0;}int  count_one_bits(unsigned int m){    int n,count;    // 返回 1的位数    n = m;    count = 0;    while(n % 2 == 0)        n = n / 2;    while(n % 2 == 1)    {        count++;        do        {            if (n != 0)                n = n / 2;            else                break;        }        while(n % 2 == 0);     }     return count;}

这就是最容易想到的办法,不断地除2模2取余,下面给出另外一种方法(省略部分语句)

...i = 32;while(i--){    if(num & 1 == 1)        count++;    num = num>>1;}

这种方法就是向右移位,使最低位&上1进行判断,还有一种更为高效的方法

int count_one_bit(int num){    int count = 0;    while(num)    {        count++;    //只要一个数不为0,则二进制表达中至少有一个1        num = num & (num-1);//没执行一次这条语句,其实就是使该数最低位的一个1置成0    }    return count;}