Stephen_yu的个人空间 https://blog.eetop.cn/yukanglong [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

如何求一个数二进制表示中1的个数?

已有 1406 次阅读| 2008-5-5 13:22 |个人分类:UBUNTU

如何求一个数二进制表示中1的个数?
代码如下:

x = (x & 0x55555555) + ((x>>1) & 0x55555555);
x = (x & 0x33333333) + ((x>>2) & 0x33333333);
x = (x & 0x0f0f0f0f) + ((x>>4) & 0x0f0f0f0f);
x += (x>>8);
x += (x>>16);
return (x & 0x00ff);

太绝了,万恶的csdn那哥们居然光给代码不给说明,害我草稿纸上演算半天才明白杂回事,在拍案叫绝的同时,不禁可惜自己脑细胞又死了一堆。临了再说一句,这方法太tmd绝了。


点赞

发表评论 评论 (3 个评论)

回复 hzpfly 2008-5-5 15:29
你也没有解释啊!
回复 xiongjianzhlp 2008-5-7 15:34
可以用移位和与运算解决啊,不过应该比较繁琐,上面的程序简介!:handshake
回复 bobofulu 2008-5-8 11:41
妙!

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 10

    评论
  • 266

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 20:37 , Processed in 0.016816 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部