编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请给出该题至少一个不同解法。
void oneofchar()
{
unsigned char ch = 0x77;
unsigned char temp = 1;
int i,j=0;
for(i = 0;i<8;i++)
{
if((ch & temp) != 0)
j++;
temp = temp << 1;
}
printf("0x%x/n",ch);
printf("Count = %d /n",j);
}
这种方法确实有点傻了,方法很多,可以参见我的关于判断32位整数二进制中1的个数的算法 ,那里的方法是可以拿来做参考的。
下面是根据那篇文章来的算法。下面四种算法,比俺的算法爽了很多。
unsigned int FindOneInNumber_01(unsigned char x)
{
unsigned int n;
for(n=0; x; x >>= 1)