单片机c语言编程 统计变量a中有多少位“1”

如题所述

typedef unsigned long UINT32;
typedef unsigned short UINT16;

/******************************************************************************
* 计算32位y中1的个数
*****************************************************************************/
UINT16 ones(UINT32 y)
{
UINT32 x;
x=y;
x -= ((x >> 1) & 0x55555555);
x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
x = (((x >> 4) + x) & 0x0f0f0f0f);
x += (x >> 8);
x += (x>>16);
return x &= 0x003f;
}

/*******************************************************************************************************
* 统计16位数据中1的个数add by czm 2010.06.08
*********************************************************************************************************/
inline UINT16 ones16(register UINT16 x)
{
x -= ((x >> 1) & 0x5555);
x = (((x >> 2) & 0x3333) + (x & 0x3333));
x = (((x >> 4) + x) & 0x0f0f);
x += (x >> 8);

return (x & 0x001f);
}
温馨提示:答案为网友推荐,仅供参考