如何在大型机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
从任意起点设置或清除它们(无论它们的当前状态如何)有点棘手,使用加法和减法都无法轻松完成。