*返回一个数的二进制表达中1的个数。*
#includeint 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;}