Colbol学习笔记:数据类型

COBOl分为四个部分:https://blog.csdn.net/qq_40801987/article/details/124242306

  1. Identification DIVISION 标志部

  1. ENVIROMENT DIVISION环境部

  1. DATA DIVISION数据部

  1. PROCEDURE DIVISION过程部(程序中最重要的部分)

工作储存节

标识:WORKING-STORAGE SECTION

作用:定义程序中用到的各种数据

** PIC **

PICTURE,用于定义数据的类型和长度, X表示字符,9 表示数字。

X(3) == XXX

9(2) == 99

Cobol 数据类型

关于数据类型重要资料:

1.https://www.codenong.com/2996278/

COBOL Data types

我对COBOL数据类型感到困惑。

像在许多采访中一样,要求解释COMP-3和COMP ...之间的区别。

确切的区别是什么?

COBOL中使用模式的含义是什么,它与数据类型有何关系?

谢谢并恭祝安康,

玛纳斯·库尔卡尼(Manasi Kulkarni)



COBOL中的USAGE描述了如何使用数据项。一些例子

的用法有:

  • 显示。这标识可以在终端上打印的项目或
    报告。这可以是数字,也可以不是数字(例如,可以是文本值)。的
    PICture子句给出了DISPLAY项目的描述。例如:
    PIC 9(5) USAGE DISPLAY描述可能显示(打印)的5位数字。
    通常会忽略USAGE DISPLAY,因为如果缺少它则意味着它。


  • 指数。这标识用作表(OCCURS)索引的项目。


  • COMPsomething表示该数据项将用于
    算术运算(即它是某种类型的数字)。


有多种类型的数字项目。最常用的两种

数字数据类型为:

  • 计算或COMP。这等效于BINARY


  • COMPUTATIONAL-3或COMP-3。这等效于PACKED-DECIMAL


COMP(BINARY)数据项通常是执行的最有效方法

对代表整数值的数据项进行计算。

在COBOL中使用COMP-3(PACKED-DECIMAL)数据项是因为

它们保持固定数量的小数点。所有计算

导致结果具有指定的小数位数。

这在记帐类型操作中特别有用。

浮点数表示数字后的位数

小数点变量(例如,小数点可以"浮动")是

而不是通常以财务运作方式来表示。

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

这里

许多程序员从COBOL开始时遇到的问题之一是

了解COMP项非常适合进行数学运算,但不能

显示(打印),直到通过以下方式将其转换为"可显示"项目

MOVE语句。如果将COMP项移动到报告中或

屏幕上不会显示的很好。需要将其移至DISPLAY

项目第一。

您可能需要研究的另一件事是

定义变量时图片与使用之间的关系

在COBOL中。这是一个非常好的COBOL入门教程的链接

来自利默里克大学。

相关讨论

  • 我们有多少COMP类型的库存?我的印象是,我们只有COMP和COMP3 ...,其中COMP是二进制存储,而COMP 3是打包的十进制存储。从回答我的问题中,我得到这些数据类型在存储方式上的不同,即存储数据所需的内存。什么是COMP-5?


  • @Manasi对于IBM Enterprise COBOL,有5个不同的COMPUTATIONAL项目,即COMP-1至COMP-5。我在原始文章中提供了指向描述这些内容的IBM手册的链接-您应该进行阅读。请注意,某些计算类型具有多个名称(例如COMP / BINARY和COMP-3 / PACKED-DECIMAL)。每个COBOL供应商都支持一组相似的COMP-x项目(在处理四舍五入,精度和截断方式方面可能存在供应商差异)。一些供应商(例如RM)提供了COMP-6项目。 COMP-5是本机二进制格式,具有2、4或9个字节的存储空间。


  • 糟糕...最后一句话应为:2、4或8个字节的存储空间。


  • 那就是COMP和COMP-1到COMP-5。 BINARY与COMP和COMP-4相同。 PACKED-DECIMAL与COMP-3相同。由于COMP / COMP-4 / BINARY相同,所以我们仍然有五个:-)


  • RM COMP-6是未签名的COMP-3。我怀疑他们发明了它:它是为了与某些现有COBOL兼容而被放入的。


  • @EJP,例如仅包含十进制值的"二进制"字段? X123456,而不是X0123456F?那就是二进制编码的十进制(BCD)。一部分是"旧的"东西(保存在磁盘/磁带存储上),另一部分是仍在使用的数据类型,需要提防。 IBM Mainframe没有"本机" BCD,因此您必须在需要时对其进行编码...


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

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

  • PIC X用于字符串。 PIC X(100)表示一个100字节的字符串。


  • PIC 9用于数字,可以选择使用S(符号)或V(隐式小数点)。例如,PIC S9(7)V99表示带符号的数字,该数字在隐式小数点左边为7位,在右边为2位。


数字字段可以具有USAGE子句以优化其存储。最常见的USAGE是DISPLAY,COMP和COMP-3。

DISPLAY将每个数字存储为字符。例如,PIC 9(4) VALUE 123将数字存储为字符串" 0123"。并且PIC 9(4)V99 VALUE 123.45将其存储为" 012345"。请注意,小数点实际上并未存储。

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

COMP-3是二进制编码的十进制,后缀为nybble。 PIC 9(3) COMP-3 VALUE 123变为两个字节12 3F。

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

相关讨论

  • 感谢您的回答。我想知道决定适合不同情况的数据类型的因素。像每种数据类型的内存消耗都不同。我猜COMP会占用4个字节的内存,而COMP-3会占用(数字/ 2)+1个字节。


  • COMP使用最小的数据类型来保存所有数字,但通常必须是2的幂。因此,如果有16位,32位和64位类型可用,则1-4位数字占2个字节,5-9位数字占4个字节,而10-18位数字占8个字节。这使得COMP-3最适合具有1、5或10-13位数字的字段。


  • 至于决定使用哪种数据类型,我不知道。我实际上不写COBOL。我是一位C ++程序员,他必须学习阅读COBOL布局才能将数据传递到大型机上的程序。


  • 试图给出-1以省略数字和字符串以外的所有其他Cobol数据类型-对象?日期?指针?文件(在某些变体中)?


  • Cobol没有"字符串",例如在带有某些描述的数据结尾标记的字段中。 Cobol具有固定长度字段和可变长度字段(长度在数据外部保存)。对于dan04s的评论,由于他不了解Cobol,因此请忽略"最佳选择" ...




至于决定使用哪种数据类型,可以使其非常复杂-但是-一组简单的准则是:

DISPLAY和Edited Zone Decimal应该仅用于在报表或sysout中显示数字。将COMP和COMP-3字段移到"显示/编辑"字段中,然后再将其放入报表或sysout中。

COMP-具有最快的整数计算速度

COMP-3(打包的十进制)-应在保留十进制位置时使用。

COMP和COMP-3字段可以在计算中一起使用。编译器将确定哪种字段类型(在幕后)将转换为单个通用数字数据类型-基于规则。



正如其他答复所暗示的那样,COMP表示大尾数二进制。 COMP-3用十进制压缩-这意味着每个半字节都映射一个十进制数字。

我不确定先前的答复是否能解决精度问题。

PIC S9(9)V9(9)COMP

PIC S9(9)V9(9)COMP-3

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

IBM大型机在硬件中打包了十进制计算。这非常有帮助,因为将小数位数转换为二进位制,即n的平方n是数字的长度。这意味着,COMP-3通常是大型机中最快的格式,但是不太可能出现在分布式系统上。但是,情况并非总是如此。例如,对于非常大的十进制精度(> 18位),Micro Focus原生COBOL解决方案在COMP-3中趋向于比COMP-5更快,反之则相反。 Micro Focus的Managed COBOL系统在COMP中几乎总是最快的(实际上,COMP-5是最好的-与COMP类似,但是将具有硬件字节序,而不是强制使用大字节序内存布局)。

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

有关分布式和托管COBOL上的COBOL的更多信息,请查看以下知识库:http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4,并且随时可以在以下位置查找cobol脸书:)

相关讨论

  • 应该警告您,在COBOL编译器之间,在处理二进制数据类型的精度方面存在差异,尤其是在发生截断时。理解如何处理复杂计算中的中间结果也是一个相当复杂的主题。例如,请参阅适用于IBM Enterprise COBOL的中间结果。


  • +1表示IBM大型机已在硬件中打包了十进制计算。十进制压缩最初是IBM对Cobol的增强。


  • 对于COMP-3 COMP和COMP-5,不应有任何差异,因为标准中定义了中间结果。但是,不同的编译器供应商确实有自己的扩展名。虽然COMP-1和COMP-3定义不清。


  • 同意COMP-3和COMP-5,但要提防COMP / BINARY项,因为至少对于IBM Enterprise COBOL而言,TRUNC(BIN / OPT / STD)编译器选项会影响截断的管理方式。


重要学习网站:http://www.web3.xin/code/2085.html

https://www.w3cschool.cn/cobol/cobol_data_types.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值