编写一个 C 函数,该函数给出一个字节中被置1 的位的个数。

来源:百度知道 编辑:UC知道 时间:2024/06/18 04:37:58
勿直接调用 ANSI C 函数库中的函数实现

方法很多,给出一种相对好一点的方法,避免了循环和除法:

unsigned char CheckSetBitNum(unsigned char ucNumber)
{
unsigned char i;
unsigned char iResult;

iResult = 0;

for(i=0;i<8;i++)
{
iResult += (ucNumber>>i) & 1;//第i位是1则加1,否则加0
}

return iResult;
}

int ch(char a)
{
int i,cnt=0;
int mask=1<<7;
for (i=0; i<7; i++)
{
if ((a&mask)!=0)
cnt++;
a<<=1;
}
return cnt;
}

二楼(回答者:garfield0 - 试用期 一级),你好像些错了吧

应该这样的:
#include "stdio.h"
int rest(int x)
{
int i,y,sum=0;
for (i=0;i<8;i++)
{
y=x%2; /*这是移出去的值*/
x=x/2; /*对于整数右移一次后x的值相当于右移前的值除以2。*/
if (y==1) sum+=1;
}
return sum;
}

int main()
{
int x;
scanf("%d",&x);/*输入的值应该在0-255之间,利于检验。*/
printf("%d",rest(x));