2

从理论上讲,我研究了comp-3中字符的结尾告诉它是正值还是负值

  • C - 表示正值
  • D - 表示负值

这不适用于大型机中新版本的 COBOL 吗?

01 WS-COMP3   PIC S9(5)   COMP-3   VALUES  -12.


DISPLAY WS-COMP3 

OUTPUT: 0001K

对于上面的代码,我将字符结尾作为 K 而不是 D 值 K 是 -2 0 ==> } -1 ==> J, -2 ==> K ... 的替换。

4

2 回答 2

6

与数值数据类型一起使用DISPLAY ...需要转换为可显示类型。COBOL 标准需要它。

一个典型的转换COMP-3是将数据项移动到等效的可显示格式。对于这种情况,PIC S9(5) COMP-3通常是转换为PIC S9(5) SIGN TRAILING用于显示。

此转换意味着将转换内部存储的值,以便将除最后一位之外的单个数字转换为可显示的数字。最后一个将更改符号指示符以反映特定实现的格式。

对于 IBM 大型机,内部 COMP-3 格式-1200 01 2D并将转换为F0 F0 F0 F1 D2显示为0001K.

许多 ASCII 系统会提供稍微不同的结果。相同的内部格式将转换为30 30 30 31 x2取决于x实现要求的位置。它可能显示为0001B0001r或其他一些,例如SIGN SEPARATE-00012

由任何 COBOL 实现完成的任何数据类型的实际转换都将记录在语言参考中。


从 2002 标准,B.1 实施者定义的语言元素列表,

  1. DISPLAY 语句(数据转换)。此项为必填项。该项目应记录在实施者的用户文档中。(14.8.10,DISPLAY 声明,一般规则 1)

DISPLAY 声明,14.8.10.3 一般规则,

  1. DISPLAY 语句使每个操作数的内容按列出的顺序传输到硬件设备。如果操作数是零长度数据项,则不会为该操作数传输任何数据。文字 1 或标识符 1 引用的数据项与硬件设备之间所需的任何数据转换都由实现者定义。
于 2022-01-17T13:35:07.077 回答
2

作为对 Rick Smith 的出色回答的补充,该回答描述了我想添加 IBM 的 Enterprise COBOL for z/OS 的原因,因为版本 5 提供了一个编译器选项来处理这个问题。

当使用带符号的数字项(二进制、压缩十进制或分区)编译时DISPSIGN(SEP)DISPLAY总是会产生一个单独的前导符号。

默认是DISPSIGN(COMPAT)问题中显示的行为。

于 2022-01-18T06:53:01.943 回答