跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 移位与循环移位

SCL 移位与循环移位

西门子 SCL 移位与循环移位:左移、右移、循环左移、循环右移,含完整 FB 示例、边界场景和常见坑。

移位指令只接受位串:BYTE、WORD、DWORD、LWORD;位宽由 IN 的类型决定。

SHL/SHR 移出的位丢弃,空出的位补 0;ROL/ROR 把移出的位补回另一端,不丢位。

N=0 返回原值;SHL/SHR 的 N≥位宽 结果为 0,ROL/ROR 按位宽取模。

SCL 移位与循环移位 4

怎么选

需求 指令
左移,低位补 0 SHL
右移,高位补 0 SHR
循环左移 ROL
循环右移 ROR

取高字节

SCL
1#HighByte := SHR(IN := #WordValue, N := 8) AND 16#00FF;
2#LowByte  := #WordValue AND 16#00FF;

移位只接受位串;Int/Real 要先转换。

常见问题

SHL/SHR 和 ROL/ROR 有什么区别?

SHL/SHR 移出的位丢弃、空位补 0;ROL/ROR 把移出的位补回另一端,不丢位。

N 超过位宽会怎样?

SHL/SHR 结果为 0;ROL/ROR 按位宽取模,例如 Word 的 N=17 等价 N=1。

移位指令支持 Int 吗?

只支持 BYTE/WORD/DWORD/LWORD 位串;Int 要先转 WORD/DWORD。

SHR 是算术右移吗?

不是。位串无符号,SHR 高位补 0;有符号数要自己处理符号位。

← 返回 SCL 指令手册