Signed Comp-3 Data COBOL 中的 DISPLAY 显示意外输出
DISPLAY in COBOL of Signed Comp-3 Data shows unexpected output
理论上,我研究过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 大型机,-12
的内部 COMP-3 格式为 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 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 一般规则,
- 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)
,其行为如问题所示。
理论上,我研究过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 大型机,-12
的内部 COMP-3 格式为 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 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 一般规则,
- 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)
,其行为如问题所示。