COBOL中的按位逻辑运算符?

时间:2012-03-13 12:55:47

标签: bit-manipulation cobol logical-operators mainframe

如何在大型机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

但似乎大型机上没有这样的运营商(或者至少在企业COBOL for z / OS中没有)。

是否有一些(希望是直截了当的!)方法来模拟/复制大型机COBOL中的按位逻辑运算?

2 个答案:

答案 0 :(得分:3)

您最好的选择似乎是'CEESITST',因为它似乎存在于z / OS COBOL中。我找到了一个使用它以及其他位操作程序的例子。

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

答案 1 :(得分:3)

如果你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

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