找回密码
 注册
搜索
查看: 833|回复: 4

[讨论] 请教一个小问题哦,怎么计算一个整形数字中1的数目?

[复制链接]
发表于 2006-8-22 13:33:00 | 显示全部楼层 |阅读模式
谢谢阿,对C技巧性的东西不懂,用硬件语言的话,倒是很好做。
发表于 2006-8-22 20:49:00 | 显示全部楼层
就是计算个位的呢?还是其他,若是个位就%10就得到了,不过你说的是整型数值,是多大就该是多少个一,是什么进制 的呢?
点评回复

使用道具 举报

发表于 2006-8-23 08:29:00 | 显示全部楼层
逐位与1进行与运算,然后进行计数。
点评回复

使用道具 举报

发表于 2006-8-23 09:11:00 | 显示全部楼层
1
unsigned int ones32(register unsigned int x)
{
   const int one = 1;
   int i;
   unsigned int nCount = 0;
   for(i = 0; i < 32; i++)
   {
      nCount += ((x>>i)&one)  
   }
   return nCount;
}
2
unsigned int ones32(register unsigned int x)
{
   unsigned int nCount = 0;
   while(x != 0)
   {
      x = x&(x-1)
      nCount++;
   }
   return nCount;
}
3
unsigned int ones32(register unsigned int x)
{
  x -= ((x >> 1) & 0x55555555);
  x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
  x = (((x >> 4) + x) & 0x0f0f0f0f);
  x += (x >> 8);
  x += (x >> 16);
  return (x & 0x0000003f);
}
点评回复

使用道具 举报

 楼主| 发表于 2006-11-3 11:11:00 | 显示全部楼层
了解了,谢谢大家,哎,太“硬”还是不行啊,软的还是需要多学习学习
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 16:58 , Processed in 0.054464 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表