Signed Comp-3 Data COBOL 中的 DISPLAY 显示意外输出

DISPLAY in COBOL of Signed Comp-3 Data shows unexpected output

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

这不适用于大型机中的新版本 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 ....

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

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

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

对于 IBM 大型机,-12 的内部 COMP-3 格式为 00 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 statement (data conversion). This item is required. This item shall be documented in the implementor's user documentation. (14.8.10, DISPLAY statement, general rule 1)

DISPLAY 语句,14.8.10.3 一般规则,

  1. The DISPLAY statement causes the content of each operand to be transferred to the hardware device in the order listed. If an operand is a zero-length data item, no data is transferred for that operand. Any conversion of data required between literal-1 or the data item referenced by identifier-1 and the hardware device is defined by the implementor.

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

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

默认值为 DISPSIGN(COMPAT),其行为如问题所示。