//題目:寫一個函數返回參數二進制中的1的個數
// 比如:15 0000 1111 4個1
// 程序原型: int count_one_bit(unsigned int value)
// {
// //返回1的個數
// }
#include<stdio.h>
#include<stdlib.h>
int count_one_bit(unsigned int value)
{
int count = 0;
int n;
while(n)
{
if(n%2==1)
count++;
n = n/2;
}
return count;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = count_one_bit(n);
printf("%d\n",ret);
system("pause");
return 0;
}運行結果:

上面是第一種實現方法,用模2、除2的方法將數字進一步的統計二進制1的個數
除此之外還可以用通過for循環來使數字在計算器中移位比特位的方法,如下:
//00000000 00000000 00000000 00001111
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000111
//數字進入循環后右移0位,與1后為1,統計一個1,i加1,一步一步循環統計
for(i=0; i<32; i++)
{
if(((n>>i)&1)==1)
count++;
}這道題我們讓n和比它小1的數字相與,舉一些例子我們就不難發現,每次相與之后的數字的二進制就比n的二進制數字少一個1,并且每次都是少最右邊的那個1,因此我們還可以用這個方法來統計參數二進制1的個數:
while(n)
{
count++; //當參數能夠進入while循環時,說明條件為真,它當中至少有一個1,所以先統計,
//否則統計結果會少一個1
n = n&(n-1);
}到這兒,可能細心的人會發現,如果以上程序輸入-1時,程序是無法執行的,因為我們給出的原型中是無符號整型,變量的最小范圍是0到65535,而整型的變量的最小范圍為-32767到32767,要想正確統計-1的二進制1,只要將函數形參改成 int n 就可以了(只適用上面與或者移位運算的模塊程序)

如有補充,盡情評論指教
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。