编程求16位二进制数中1的个数?

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:47:52
谢谢了。给出算法就可以了

判断(x >> n) & 0x0001是否为1,如果为1那么个数++,x为要求出的数,n是一个循环量

#include<stdio.h>
#include<stdlib.h>

// 算法
int f(unsigned int x)
{
int i,sum;
sum = 0;
for (i=0;i<16;i++){
if ( x & 0x0001 == 1) sum = sum + 1;
x = x >> 1;
};
return sum;
}

void main()
{
unsigned int x=0xffff, y=0x0002;
printf("0x%04x: %d\n", x,f(x));
printf("0x%04x: %d\n", y,f(y));
}

C语言

unsigned short count( unsigned short x )
{
unsigned short n;
n = ( x>>1 ) & 0x36DB;
x -= n;
n = ( n>>1 ) & 0x36DB;
x -= n;
x = (( x + ( x>>3 )) & 0x71C7 ) % 63;
return x;
}

void main(void)
{
printf("%ld\n",count(0xff));/*结果是8*/
printf("%ld\n",count(0x88));/*结果是2*/
}

网上好多