回复:SCL 如何计算整数里面有多少个一

已锁定

锋言锋语

西门子1847工业学习平台

  • 帖子

    4055
  • 精华

    54
  • 被关注

    135

论坛等级:至圣

注册时间:2011-07-31

钻石 钻石 如何晋级?

发布于 2022-11-30 11:02:22

21楼

相邻位相加:


a =( a & 0x55555555) + ((a & 0xAAAAAAAA)>>1);

相加之后, 每2个bit存储该2bit的1的个数;

继续,相邻两位相加:


a = (a & 0x33333333) + ((a & 0xCCCCCCCC) >> 2);


4位

a = (a & 0F0F0F0F) + ((a & 0xF0F0F0F0) >> 4)

8位

a = (a & 0x00FF00FF) + ((a & 0xFF00FF00) >> 8)


16位:

a = (a & 0000FFFF) + ((a & FFFF0000) >> 16)


此时, a的值就是一个32位整数的1的个数;


不忘初心
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11107条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。