寫一個函數返回參數二進制中 1 的個數
比如:15 二進制爲: 0000 1111 4 個 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位數
}
如果讓我們求一個十進制數中1 的個數,我們會將這個數除以10之後看餘數是不是1,然後將得到的商除以10看餘數是不是1,依次類推,直到商爲0.
如下圖解釋:
那麼我們求二進制數的時候也一樣,將二進制除以2,看得到的餘數是不是1,再用商除以2,一直到商爲0爲止。
如圖:
代碼如下:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int num = 0;
while(value)//value爲0時跳出循環
{
if(value%2)//如果餘數爲1,則num自加1
num++;
value = value/2;//將得到的商再付給value
}
return num;
}
int main()
{
int i = 0;
int num = 0;
printf("請輸入一個正數:");
scanf("%d",&i);
num = count_one_bits(i);//num爲記錄1 的個數
printf("num=%d\n",num);
system("pause");
return 0;
}
結果:
在這裏,還可以用位運算解這道題。
代碼如下:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int num = 0;
while(value)
{
if( (value&1) ==1)
num++;
value>>=1;//右移
}
return num;
}
int main()
{
int i = 0;
int num = 0;
printf("請輸入一個正數:");
scanf("%d",&i);
num = count_one_bits(i);
printf("num=%d\n",num);
system("pause");
return 0;
}