COBOL中的位逻辑运算符是什么?

3

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

但是在主机上似乎没有这样的运算符(或者至少在z/OS企业COBOL中没有)。

是否有一些(希望是简单明了的!)方法在主机COBOL中模拟/复制位逻辑操作?

2个回答

3

3
CEESITST实际上是一种可调用语言环境服务,可用于任何支持LE的应用程序:Enterprise COBOL、Enterprise PL/I、C/C++(虽然这些语言有位运算符)和汇编语言(同样适用)。它已在z/OS信息中心的语言环境部分与其他LE可调用服务一起进行了文档化。 - cschneid
最新的COBOL标准(我现在记不清是哪一年了)现在具有位操作能力,就像您在Micro Focus COBOL中看到的那样。不幸的是,IBM仍然似乎停留在过去的1985标准+额外功能(主要是面向对象的COBOL),并且没有迹象表明将Enterprise COBOL带入21世纪。 - zarchasmpgmr
您是正确的,Enterprise COBOL不符合最新标准。我相信没有COBOL编译器能完全实现该标准。IBM目前正在为其新的COBOL编译器运行邀请制beta(请参阅http://www-01.ibm.com/software/os/systemz/announcements/apps/)。您提到的其他功能还包括一些非常好的XML生成和解析功能。我希望他们能在不先将表格写入文件的情况下包含对工作存储或局部存储表进行排序的功能。 - cschneid
@cschneid 表格排序现在已经在 V5.2 中可用。 - Bill Woodger
IBM网站上的链接“www-01.bim.com/software/os/systemz/announcements/apps”显示“页面未找到”。 - Ira Baxter

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

从任意起始点设置或清除它们(无论它们当前的状态如何)会更加棘手,不能轻松地通过加法和减法来完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接