您的位置:首页 > 其它

C程序:二进制表示中有多少个"1″;二进制表示中有多少位是不同的

2010-04-21 08:55 393 查看
//对于一个字节(8bit)的变量,求其二进制表示中”1″的个数,要求算法执行效率尽可能的高
int num_a(unsigned char c) //方法a
{
static unsigned char arr[] =
{ 1, 2, 4, 8, 16, 32, 64, 128 };
int ret = 0;
for (int i = 0; i < 8; i++)
{
if (arr[i] & c)
{
ret++;
}
}
return ret;
}
void num_b_pre() //使用方法a产生方法b需要的数据
{
for (int i = 0; i < 256; i++)
{
if (i % 16 == 0)
{
printf("/n");
}
printf("%d, ", num_a(i));
}
}
int num_b(unsigned char c) //查表法效率最高
{
static unsigned char arr[] =
{ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4,
2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4,
4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3,
2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4,
4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3,
3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5,
4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4,
4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5,
3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6,
6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6,
5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, };
return arr[c];
}
//长整型的二进制表示中有多少个"1″
int numDWORD(unsigned long d)
{
return num_b(d & 0xff) + num_b((d >> 8) & 0xff);
}
//两个长整型,二进制表示中有多少位是不同的
int diffDWORD(unsigned long a, unsigned long b)
{
return numDWORD(a|b) - numDWORD(a&b);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 算法
相关文章推荐