技术论坛

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

作者 主题
侠客

经验值: 653
发帖数: 21
精华帖: 1
主题:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 楼主 2022-11-28 09:58:14


前几天被人考问 如何 计算整数或者WORD 里面有多少个1 ,

用来做报警信息,其实我不这样用, 既然问到了写一个证明我会计算整数里面有多少个一。







 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1796815&b_id=66&s_id=0&num=37

至圣

经验值: 19840
发帖数: 4383
精华帖: 2
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 1楼 2022-11-28 10:14:15

对滴,楼主的观点赞同。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8096
发帖数: 1308
精华帖: 6
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 2楼 2022-11-28 10:44:37

不认同这种方式.....每次减1真的是浪费.........  再者修改了输入的数据...


养活一团春意思,撑起两根穷骨头
以下网友喜欢您的帖子:

  
至圣

经验值: 127331
发帖数: 22001
精华帖: 824
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 3楼 2022-11-28 12:21:53

也可以做成无固定数据类型的FC。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 18914
发帖数: 2108
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 4楼 2022-11-28 13:09:30

互相交流,不错的方法


 
以下网友喜欢您的帖子:

  
游士

经验值: 247
发帖数: 34
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 5楼 2022-11-28 13:15:10

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


 
以下网友喜欢您的帖子:

  
至圣

经验值: 127331
发帖数: 22001
精华帖: 824
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 6楼 2022-11-28 13:41:33
以下是引用nnnnnnmmmmmmm在2022-11-28 13:15:10的发言 >5楼

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

计数+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;



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
侠客

经验值: 653
发帖数: 21
精华帖: 1
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 楼主 7楼 2022-11-28 14:00:39
以下是引用贤贤易色在2022-11-28 10:44:37的发言 >2楼

不认同这种方式.....每次减1真的是浪费.........  再者修改了输入的数据...

感觉 你完全没明白 这是最高效的方式,for 循环是所有人第一个想到的

我们写程序 一定要用最优的方式。 

不是能跑就行。每一个地方都写到极致 合起来就没有bug 。

随手写的,要理解到本质。



 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4871
发帖数: 741
精华帖: 10
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 8楼 2022-11-28 15:04:06

这个很有启发,楼主是不断把最右边的1变成0。

如果不断把最右边的0变成1呢?

REGION BLOCK INFO HEADER

   


#FC_BitCountInt := 0;



REGION Bit Count

    WHILE #n <>16#FFFFFFFF DO //假设n是DWORD.

        #n := #n OR (#n + 1);

        #FC_BitCountInt += 1;

    END_WHILE;


    #FC_BitCountInt := 32- #FC_BitCountInt;

END_REGION



 
以下网友喜欢您的帖子:

  
版主

经验值: 69050
发帖数: 12265
精华帖: 59
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 9楼 2022-11-28 15:35:35

感谢分享,又学到了,这个是不是也是从高级语言算法里面的恩路呀


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
游士

经验值: 247
发帖数: 34
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 10楼 2022-11-28 16:29:14
以下是引用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的数 有几个? 能否也借鉴这个思路


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1224
发帖数: 83
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 11楼 2022-11-28 16:55:04

不是有BITSUM指令?


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4243
发帖数: 583
精华帖: 3
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 12楼 2022-11-29 09:13:59


挻不错的。Idea很重要,不要事后诸葛亮。拿出另一种方案跟楼主的方案PK下。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 653
发帖数: 21
精华帖: 1
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 楼主 13楼 2022-11-29 09:25:29

一般都喜欢自己写,不过指令也是算法 人家西门子封装好的。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2293
发帖数: 297
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 14楼 2022-11-29 10:27:47
whatever it takes
以下网友喜欢您的帖子:

  
至圣

经验值: 23742
发帖数: 3385
精华帖: 52
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 15楼 2022-11-29 21:00:13

这个只能说效率很高, 最高谈不上。


效率最高的是  相邻位相加,  相邻两位相加, 相邻4位相加, 相邻8位相加。


这种。


不忘初心
以下网友喜欢您的帖子:

  
新手

经验值: 33
发帖数: 4
精华帖: 0
回复:SCL 如何计算整数里面有多少个一


只看楼主 16楼 2022-11-29 22:05:31
写出来 光说不练假把式
 
以下网友喜欢您的帖子:

  
新手

经验值: 33
发帖数: 4
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 18楼 2022-11-29 22:09:29
以下是引用锋言锋语在2022-11-29 21:00:13的发言 >15楼

这个只能说效率很高, 最高谈不上。


效率最高的是  相邻位相加,  相邻两位相加, 相邻4位相加, 相邻8位相加。


这种。

写出来 光说不练假把式
 
以下网友喜欢您的帖子:

  
至圣

经验值: 15532
发帖数: 1735
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 19楼 2022-11-30 09:21:57


感谢分享!鼓掌!


海纳百川,厚德务实!
以下网友喜欢您的帖子:

  
游侠

经验值: 573
发帖数: 62
精华帖: 0
回复:SCL 如何计算整数里面有多少个一
推荐帖


只看楼主 20楼 2022-11-30 09:37:05

感谢楼主分享


0
以下网友喜欢您的帖子:

  
收起
SCL 如何计算整数里面有多少个一
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。