计算一个 unsigned int 中 “1“ 的个数

  • 前段时间看到一个神奇的算法, 计算 unsigned int 类型中 1 的个数
  • 这个算法的厉害之处在于它的运行效率特别高, 下面是代码以及我做的笔记, 大家来讨论讨论.

代码

int count_bits(unsigned int a)
{
    unsigned int x = a;

    x = x - ((x >> 1) & 0x55555555);                     ///< 1: ->相邻2位  "1" 的个数和
    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);      ///< 2: ->相邻4位  "1" 的个数和
    x = (x + (x >> 4)) & 0x0f0f0f0f;                     ///< 3: ->相邻8位  "1" 的个数和
    x = x + (x >> 8);                                    ///< 4: ->相邻16位 "1" 的个数和
    return (x + (x >> 16)) & 0xff;                       ///< 5: ->相邻32位 "1" 的个数和
}

讲解


备注

欢迎关注个人微信公众号 IoTlittleHu , 第一时间获取最新文章。

提供一个QQ交流群, 欢迎入群,共同学习!共同进步!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot 小胡

从未指望过会有人打赏...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值