COBOL中的按位逻辑运算符



如何在大型机COBOL中表达按位逻辑运算?

我有:

       01  WRITE-CONTROL-CHAR.
           03  WCC-NOP           PIC X VALUE X'01'.
           03  WCC-RESET         PIC X VALUE X'02'.
           03  WCC-PRINTER1      PIC X VALUE X'04'.
           03  WCC-PRINTER2      PIC X VALUE X'08'.
           03  WCC-START-PRINTER PIC X VALUE X'10'.
           03  WCC-SOUND-ALARM   PIC X VALUE X'20'.
           03  WCC-KEYBD-RESTORE PIC X VALUE X'40'.
           03  WCC-RESET-MDT     PIC X VALUE X'80'.

在Micro Focus COBOL中,我可以执行以下操作:

WCC-NOP B-AND WCC-RESET

但在大型机上似乎没有这样的运算符(或者至少在Enterprise COBOL for z/OS中没有)。

在大型机COBOL中,是否有一些(希望是直接的!)模拟/复制按位逻辑操作的方法?

您的最佳选择似乎是"CESITST",因为它似乎存在于z/OS COBOL中。我发现了一个使用它以及其他位操作程序的例子。

http://esj.com/articles/2000/09/01/callable-service-manipulating-binary-data-at-the-bit-level.aspx

如果将不共享位的值AND放在一起,则总是为零,所以我假设您指的是OR。这是有道理的,因为您倾向于使用OR独立的位来构造多位值。

考虑到这一点,当比特掩码彼此独立时,就像在一个术语中不与其他术语交互一样,以下两者之间没有区别:

termA OR termB

和:

termA + termB

你的术语在这里都是独立的,是x'1'x'2'等等(没有x'03'x'ff'),所以添加它们应该很好:

COMPUTE TARGET = WCC-NOP + WCC-RESET

现在,这对于从零开始设置位很好,但对于清除位则不那么有用。然而,您可以使用类似的技巧进行清除:

COMPUTE TARGET = 255 - WCC-NOP - WCC-RESET

从任意起点设置或清除它们(无论它们的当前状态如何)有点棘手,使用加法和减法都无法轻松完成。

最新更新