1. 程式人生 > >求一個數二進位制位中有多少個 1 的不同解法

求一個數二進位制位中有多少個 1 的不同解法

*返回一個數的二進位制表達中1的個數。*

#include<stdio.h>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;}