天天看點

求一個數二進制中1的個數

/*
面試題10:  二進制中1的個數
題目:請實作一個函數,輸入一個整數,輸出該二進制表示中1的個數。
     例如把9表示成二進制是1001,有兩位是1,是以如果輸入9,該函數輸出2.
*/
#if 0
#include<stdio.h>
/*
法一:
   1.先判斷整數二進制表示中最右邊一位是不是1,接着右移一位,此時原來處于從右邊數起的第二位被移到最右邊了,再判斷是不是1,
   這樣每次移動一位,直到整個整數變成0為止
   2.把整數和1做位與運算看結果是不是0,如果一個整數與1做與運算的結果是1,表示該整數最右邊一位是1,否則是0.
*/
int NumberOf1(int n)  //負數也可以
{
int count = ;
unsigned int flag = ;
    while(flag)
{
if(n&flag)  //判斷n的最低位是不是1
 count++;
   flag = flag << ; //左移和n做與運算,去判斷n的次低位是不是1
}
return count;
}
/*
法二:
将一個整數減去1,都是把最右邊的1變成0,如果它的右邊還有0的話,所有的0都變成1,而左邊的所有位保持不變。
将一個整數減去1,再和原整數做與運算,會把該整數最右邊一個1變化才能0,
    那麼一個整數的二進制表示中有多少個1,就進行多少次這樣的操作。
*/
int NumberOf1(int n)
{
int count = ;
while(n)
{
++count;
n = (n-)&n;
}
return count;
}


int main()
{
int num ;
printf("請輸入一個整數:");
scanf("%d",&num);
int count = NumberOf1(num);
printf("該數二進制表示中1的個數是:%d\n",count);
}
#endif
           

繼續閱讀