恭喜,你发布的帖子
发布于 2022-12-17 09:15:01
35楼
试着写一个,比较土,但是好在简单明了
FUNCTION "SumOne" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
IN : LInt;
END_VAR
VAR_OUTPUT
Count : Int;
END_VAR
VAR_TEMP
TempLint : LInt;
SumOne : Int;
END_VAR
BEGIN
#TempLint := #IN;
#SumOne := 0;
WHILE #TempLint <> 0 DO
IF (#TempLint MOD 2) = 1 THEN
#SumOne += 1;
END_IF;
#TempLint := SHR(IN := #TempLint, N := 1);
END_WHILE;
#Count := #SumOne;
END_FUNCTION
移动、比较是最基础的方法。
没有楼主的代码效率高。楼主的方法是有几个1,就DO几次,没有多余的累积。
请填写推广理由:
分享
只看
楼主