COBOL数据类型

COBOL数据类型,cobol,Cobol,我对COBOL数据类型感到困惑。 就像在许多采访中一样,它被要求解释COMP-3和COMP-3之间的区别。。。 确切的区别是什么? COBOL中使用模式的含义是什么?它与数据类型的关系如何?COBOL中的使用描述了如何使用数据项。几个例子 主要用途包括: 展示。这标识了可打印在终端或打印机上的项目 报告。这可能是数字,也可能不是数字(例如,可能是文本值)。这个 显示项的描述由PICture子句给出。例如: PIC 9(5)用法显示描述了一个可显示(打印)的5位数字。 通常情况下,用法显示会被关

我对COBOL数据类型感到困惑。 就像在许多采访中一样,它被要求解释COMP-3和COMP-3之间的区别。。。 确切的区别是什么?
COBOL中使用模式的含义是什么?它与数据类型的关系如何?

COBOL中的使用描述了如何使用数据项。几个例子
主要用途包括:

  • 展示。这标识了可打印在终端或打印机上的项目 报告。这可能是数字,也可能不是数字(例如,可能是文本值)。这个 显示项的描述由PICture子句给出。例如:
    PIC 9(5)用法显示
    描述了一个可显示(打印)的5位数字。 通常情况下,
    用法显示
    会被关闭,因为如果缺少,则会暗示它
  • 索引。这标识了用作表索引的项(发生)
  • COMPsomething表示数据项将在中使用 算术运算(即,它是某种类型的数字)
有各种类型的数字项。两种最常用的 数字数据类型包括:

  • 计算的或比较的。这相当于二进制
  • 计算-3或COMP-3。这相当于压缩十进制
COMP(二进制)数据项通常是最有效的执行方法 对表示整数值的数据项的计算

COBOL中使用COMP-3(压缩十进制)数据项是因为 它们保持固定数量的小数点。所有计算 导致结果具有规定的小数点数。 这在会计类型的操作中特别有用。 浮点数表示数字后面的位数 小数点变量(例如小数点可以“浮动”),它是 而不是金融业务通常的表现方式

您可以找到IBM Enterprise COBOL的计算项的完整列表

许多程序员在开始使用COBOL时遇到的问题之一是 了解COMP项目对数学很有帮助,但不能是 显示(打印)直到通过转换为可显示项目 搬家声明。如果将薪酬项目移动到报表或 屏幕显示不太好。它需要移动到显示器中 第一项

另一件你可能需要进一步研究的事情是 定义变量时图片和用法之间的关系 用COBOL。这里是一个非常好的介绍链接
在国立利莫瑞克大学,

COBOL实际上只有两种数据类型:数字和字符串。

COBOL记录中每个字段的布局由
PICTURE
(通常缩写为
PIC
)子句精确指定。最常见的是:

  • picx
    用于字符串<代码>PICX(100)
表示100字节的字符串
  • PIC 9
    表示数字,可选带
    S
    (符号)或
    V
    (隐式小数点)。例如,
    PIC S9(7)V99
    表示一个有符号的数字,其隐式小数点左侧为7位,右侧为2位
  • 数值字段可以有一个
    用法
    子句来优化其存储。最常见的
    用法是
    DISPLAY
    COMP
    COMP-3

    DISPLAY
    将每个数字存储为一个字符。例如,
    PIC 9(4)值123
    存储数字,就像存储字符串“0123”一样。并且
    pic9(4)V99值123.45
    将其存储为“012345”。请注意,小数点实际上并没有存储

    这是一种低效的格式,因为它需要8位来表示每个数字。但它确实对有符号数字进行了“优化”,即使用最后一个字节的一半来存储符号。通常情况下,EBCDIC数字的Nyble都很高,因此0123是F0 F1 F3。但-0123为F0 F1 F2 D3;D表示负。C表示正,F表示无符号(即正)。(类似的格式在COBOL的ASCII版本中使用,但没有标准化。)

    COMP-3
    是带尾随符号nybble的二进制编码十进制数<代码>PIC 9(3)COMP-3值123
    变为两个字节12 3F


    COMP
    BINARY
    是本机二进制格式,就像C中的
    short
    int
    long
    一样。

    正如其他回复所示,COMP意味着大端二进制。COMP-3是压缩十进制-这意味着每个半字节对应一个十进制数字

    不过,我不确定之前的回答是否正确

    PIC S9(9)V9(9)组件 和 图S9(9)V9(9)COMP-3

    具有完全相同的精度。这是ANSI85标准的一部分。编译器和运行时的工作是确保COMP中的二进制表示具有适当的转换,以确保获得与显示或COMP-3使用完全相同的结果

    IBM大型机的硬件中包含了十进制计算。这是非常有用的,因为十进制到二进制的转换是n的平方n是数字的长度。这意味着COMP-3通常是大型机中速度最快的格式,但在分布式系统中不太可能。然而,情况并非总是如此。例如,对于非常大的十进制精度(>18位),Micro Focus native COBOL解决方案在COMP-3中的速度往往比COMP-5快,但在其他情况下则相反。Micro Focus的托管COBOL系统在COMP中几乎总是最快的(实际上,COMP-5是最好的-与COMP类似,但将具有硬件尾端,而不是强制实施大尾端内存布局)

    最后,我的建议是,对于中间值和一般数学,二进制long和二进制double的较新数据定义是更好的选择,因为这样编译器就可以决定如何存储和优化

    有关分布式和托管COBOL的更多信息