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

已锁定

nnnnnnmmmmmmm

  • 帖子

    30
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2010-01-20

普通 普通 如何晋级?

发布于 2022-11-28 16:29:14

10楼

展开查看
以下是引用yming在2022-11-28 13:41:33的发言 >6楼

计数+1

1010-1=1001;1010 & 1001 =1000;

<>0  计数+1

1000-1=0111; 1000 & 0111=0; 结果为0 输出 2

原理是:-1只会影响最后不为零的位。

比FOR全判断要快。效率高


例如:0011 0000-1=0010 1111 &之后 为0010 0000;


以下是引用nnnnnnmmmmmmm在2022-11-28 13:15:10的发言 >5楼:感谢楼主分享,非常...

引用5楼详细内容:

感谢楼主分享,非常简单的方式,开拓了思路。但是这个思路的原理 我不理解,为什么要和它少1的那个数相与?

理解了很久,-1就是向是1的位借1。

如果最后位是1,那么借完后,位为0。如果最后位为0,向左侧最近的是1的位借1,借完后这个位变成0。与运算的目的是将 借位后的位清0,然后继续下一次借位。


那么这个方法能不能再扩展一下,问题改成 任意一个数  求个位、百位、千位、万位......不是0的数有几个?

或者再详细一点,是1的数 是2的数 是3的数 有几个? 能否也借鉴这个思路

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10587条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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