首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >S9(9)如何解释左对齐的数值?

S9(9)如何解释左对齐的数值?
EN

Stack Overflow用户
提问于 2014-04-03 15:17:20
回答 1查看 410关注 0票数 0

假设我有一个PS输入文件,其中包含9字节长的数据。输入数据将是必须左对齐的数字。因此,如果输入文件中的数字小于9个字节,则该数字将以空格结尾。

当我将这样一个数字读入9(9)变量并执行DISPLAY时,显示的值将是后面跟着空格的数字(用假脱机中的SET HEX ON检查)。

但是,当我将9(9)变量中的值MOVE到一个S9(9) COMP变量中,然后DISPLAY它的值时,显示的值将是某个随机数值。

我的问题是,在上面的场景中,COBOL如何解释/转换S9(9) COMP变量的值?

EN

回答 1

Stack Overflow用户

发布于 2014-04-03 16:16:33

这是一台电脑,你得到的结果远不是随机的。

你认为会发生什么?

你将一些不是数字的东西,但是你已经定义为数字的东西,MOVEing到一个二进制域。你将拥有一个与你的数据相关的值,只是不是你所期望的。

您有编译器选项NUMPROC(NOPFD)。如果你有NUMPROC(PFD),你会得到一个S0C7 abend,

您会发现所有的尾随空格都被视为零,使用NUMPROC(NOPFD)。

在计算之前,分区十进制,或者像您的例子中,转换为二进制,是“打包”的。这意味着所有的区域都被丢弃了,符号和最后的数字颠倒了。

所以,在打包的数字中,你只能得到数字和符号。

只要所有的数字都是0-9,符号是A-F,就没有S0C7。结果乱码,但没有S0C7。

如果我们考虑你最后两个尾随空格,X'4040'。您有NUMPROC(NOPFD),因此编译器将为您“修复”符号(在本例中为F )。抛出区域(前4个)交换最后一个字节(变为X'04'),修复符号(变为X'0F'),并将该值转换为二进制(这是成功的)。你已经把空格变成了零。

如果您使用NUMPROC(PFD),符号修复将不会发生,并且转换为二进制(CVB)将给您一个S0C7异常终止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22830472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档