COBOL中数据类型

浅谈cobol的几种数据类型 COBOL中使用PICTURE子句来定义数据类型. 主要的数据类型有以下几类:
类型 示例 说明
字母形 A(2) 只能使用26个字符和空格. 字符形 X(2) 可以使用字符集定义的字符和数字
数字形 S9V99 数字形有三个类型, binary, packed decimal, zoned decimal. 数字编辑 -zz9.99 用于格式化数值输出 其他如DBCS类型, 浮点形在COBOL使用很少.
对于字符,字母形都比较好理解, 所占字符数, 就是其定义的个数. 对于数字编辑形, 仅仅用于格式化数值, 不能进行数值运算和布尔比较. 计算字符数需要如下计算:
eg: -zz99.99 所占字符数就是计算所有定义字符数, 1(-)+2(zz)+2(99)+1(.)+2(99)=8. 其中-号表示负数显示-号, 正数不显示+号. zz表示前导0, 就是不显示前面的0.
eg: PICTURE Value of Data Edited
-ZZ99.99 +123.45 123.45
-ZZ99.99 -123.456 - 123.45
我们详细说一下数值形,按照带不带符号,可以区分符号形, 非符合号形. 安装存储类型分为binary, packed decimal, zoned decimal.
以下举例详细说明:
zone decimal 一般称9型. eg 9(4)V99或者s9(4)V99, 每个9占一位,符号和V不占位. 示例就分别是6. 如果这个值是1234.56,在内存存储分别是’F1F2F3F4F5F6’, ‘F1F2F3F4F5C6’. 对于无符号,就是123456的EBCDIC码,对于带符号,对于正数,最后的F为C表示正,负数为D表示负.示例就是’C6’.
packed decmial 也是COMP-3型. 9(4)V99 COMP-3或者s9(4)v99 comp-3型.存储长度计算为[x/2]+1,表示9的总个数(x)+1/2的取整, 原因是做了压缩存储,这个示范就是,如果这个值是123456, 在内存存储分别是’0123456F’和’0123456C’, 对于无符号,最后补个F表示无符号;对于带符号,如果是正数就是C,负数就是D.所有总长度就是[x/2]+1.
使用的时候, 数值型之间都可以直接进行各类操作. 但需要注意的是, 如果对于未赋值的COMP-3型, 在赋值前做任何计算操作, 将会导致数据例外, 但对于zoned decimal就会才有缺省值,不会有数据例外.
还有, 若是作为db2的hv, 就必须类型与DB2的类型匹配, 如果一个9型的来接受,也会造成错误.
COMP型的变量常用于表示半个字或者整个字(主机一个字是4个字节), 比如半个字也就是16BIT, 对于有符合的数来说就是-32767~+32767, 所以可以用S9(5) COMP来表示, 当然也可以用S9(4) COMP来表示(因为S9(4)表示的范围是-9999到+9999, 一个字节存不下, 也需要2个自己存储), 对于一个字就是S9(8)或者S9(9).
COMP 二进制数据类型
COMP-1 单精度浮点型
COMP-2 双精度浮点型
COMP-3 内部十进制
COMP-4 内部十六进制

     s9 (4)  comp    是小整数.2个数相当于一个字节,共占2个字节。
     S9(4) COMP-3   符号占半个字节,4个数字占2个半字节,一共占3个字节。
     S9(7) COMP-3   占多少个字节?
     COMP-3用内部十进制存储,S是占位的占4位,半个字节;7个数字每个4位。(4+7*4)/8=(4+28)/8=4个字节。

你可能感兴趣的:(笔记)