回复:怎样实现64位循环左移?(转)

姑苏城外

  • 帖子

    1466
  • 精华

    19
  • 被关注

    8

论坛等级:侠圣

注册时间:2006-05-29

黄金 黄金 如何晋级?

发布于 2011-06-29 00:25:46

66楼

quote:以下是引用Zane在2011-04-05 00:19:00的发言:
我出一题吧:

N>3 的任意位数的循环移位。
以前正好做过一个,翻出来,加了一个用ENO判断移位是否正确执行.
合法移位0<=N<=63,程序如下:

FUNCTION "Shift_64bits" : VOID
TITLE =
AUTHOR : SXG
FAMILY : Shift
NAME : Shift_64
VERSION : 1.0


VAR_INPUT
X_Dword1 : DWORD ;
X_Dword2 : DWORD ;
X_ShiftNumber : INT ; //0 <= X_ShiftNumber <= 63
END_VAR
VAR_OUTPUT
Q_Shifted1 : DWORD ;
Q_Shifted2 : DWORD ;
END_VAR
VAR_TEMP
L_InputDword1 : DWORD ;
L_InputDword2 : DWORD ;
L_OutputDword1 : DWORD ;
L_OutputDword2 : DWORD ;
L_ShiftNumberDINT : DINT ;
L_InputAddress : DINT ;
L_OutputAddress : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =

L #X_ShiftNumber;
L 63;
>I ;
JC err;

L #X_Dword1;
T #L_InputDword1;
L #X_Dword2;
T #L_InputDword2;
L #X_ShiftNumber;
ITD ;
T #L_ShiftNumberDINT;

L L#0;
T #L_InputAddress;

m001: A L [#L_InputAddress];
L #L_ShiftNumberDINT;
L L#64;
+D ;
T #L_OutputAddress;
= L [#L_OutputAddress];

L #L_InputAddress;
L L#1;
+D ;
T #L_InputAddress;
L 64;
>=D ;
JC end;
L #L_ShiftNumberDINT;
L L#1;
+D ;
T #L_ShiftNumberDINT;
L 64;
>=D ;
JCN m001;
TAK ;
-D ;
T #L_ShiftNumberDINT;
JU m001;
err: CLR ;
SAVE ;
BE ;
end: L #L_OutputDword1;
T #Q_Shifted1;
L #L_OutputDword2;
T #Q_Shifted2;
SAVE ;
BE ;
END_FUNCTION

与人规矩,不与人巧!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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