如何在大型机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中的按位逻辑运算?
答案 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
从任意起始点设置或清除它们(无论其当前状态如何)都有点棘手,加法和减法无法轻松完成。