从理论上讲,我研究了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 ... 的替换。
与数值数据类型一起使用DISPLAY ...
需要转换为可显示类型。COBOL 标准需要它。
一个典型的转换COMP-3
是将数据项移动到等效的可显示格式。对于这种情况,PIC S9(5) COMP-3
通常是转换为PIC S9(5) SIGN TRAILING
用于显示。
此转换意味着将转换内部存储的值,以便将除最后一位之外的单个数字转换为可显示的数字。最后一个将更改符号指示符以反映特定实现的格式。
对于 IBM 大型机,内部 COMP-3 格式-12
是00 01 2D
并将转换为F0 F0 F0 F1 D2
显示为0001K
.
许多 ASCII 系统会提供稍微不同的结果。相同的内部格式将转换为30 30 30 31 x2
取决于x
实现要求的位置。它可能显示为0001B
或0001r
或其他一些,例如SIGN SEPARATE
给-00012
。
由任何 COBOL 实现完成的任何数据类型的实际转换都将记录在语言参考中。
从 2002 标准,B.1 实施者定义的语言元素列表,
- DISPLAY 语句(数据转换)。此项为必填项。该项目应记录在实施者的用户文档中。(14.8.10,DISPLAY 声明,一般规则 1)
DISPLAY 声明,14.8.10.3 一般规则,
- DISPLAY 语句使每个操作数的内容按列出的顺序传输到硬件设备。如果操作数是零长度数据项,则不会为该操作数传输任何数据。文字 1 或标识符 1 引用的数据项与硬件设备之间所需的任何数据转换都由实现者定义。
作为对 Rick Smith 的出色回答的补充,该回答描述了我想添加 IBM 的 Enterprise COBOL for z/OS 的原因,因为版本 5 提供了一个编译器选项来处理这个问题。
当使用带符号的数字项(二进制、压缩十进制或分区)编译时DISPSIGN(SEP)
,DISPLAY
总是会产生一个单独的前导符号。
默认是DISPSIGN(COMPAT)
问题中显示的行为。