从理论上讲,我研究的是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.
发布于 2022-01-17 13:35:07
使用带有数字数据类型的DISPLAY ...需要转换为可显示的类型。COBOL标准要求它。
COMP-3的一个典型转换是将数据项移动到等效的可显示格式。在这种情况下,PIC S9(5) COMP-3经常被转换为PIC S9(5) SIGN TRAILING来显示。
这种转换意味着内部存储的值将被转换,因此除最后一个数字外,单个数字将被转换为可显示的数字。最后一个将更改标志指示符,以反映特定实现的格式。
对于IBM大型机,-12的内部COMP-3格式为00 01 2D,并将转换为以0001K形式显示的F0 F0 F0 F1 D2。
许多ASCII系统将提供一个稍微不同的结果。相同的内部格式将转换为30 30 30 31 x2,其中x取决于实现的需求。它可以显示为0001B或0001r或其他一些东西,例如SIGN SEPARATEgiving -00012。
任何COBOL实现完成的任何数据类型的实际转换都将记录在语言参考中。
从2002年标准B.1实施或定义的语言元素列表,
显示说明,14.8.10.3一般规则,
定义。
发布于 2022-01-18 06:53:01
除了Rick出色的回答之外,我还想补充一下IBM的Enterprise /OS,因为版本5提供了一个编译器选项来处理这个问题。
在用DISPSIGN(SEP)编译有符号数字项(二进制、填充、小数点或分区)的DISPLAY时,总是会产生一个单独的前导符号。
默认值是DISPSIGN(COMPAT),它的行为将与问题中所示的行为类似。
https://stackoverflow.com/questions/70741374
复制相似问题