- 论坛徽章:
- 1
|
菜鸟问题:Packed Decimal与Zoned Decimal有何区别?
参考一下
2.1.2.1压缩十进制格式
压缩十进制格式是指每个存储字节(除了低位字节外)有两个十进制数字。低位字节的左区有一个数字而在右区有一个符号(+或-),使用标准符号:正数是十六进制F,负数是十六进制的D。压缩十进制格式看来是这样的:
0 7 0 7
数字 数字 数字 符号
字节
低位字节的符号部分表明了在数字部分描述的数字值是正数还是负数。在2.1.2.4.2的图40表明了十进制数8191在压缩十进制格式中的存放形式。
对于一个程序描述文件,用下列项指定压缩型输入、输出和数组或表字段:
压缩十进制输入字段:在输入规范表的36位指定P。
压缩十进制输出字段:在输出规范表的52位指定P,如果规定了编辑码,这位一定是空格。
压缩十进制数组或表字段:在定义规范表的40位指定P。编译时数组和表的外部格式不能使用压缩十进制格式。
对于一个外部描述文件,在数据描述规范表中指定数据格式。
2.1.2.2确定压缩十进制字段的数字长度
用下面的公式来计算压缩十进制字段的数字长度:
数字的数目=2n-1
这里,n=压缩输入字段使用的位数
这个公式给出了压缩十进制格式能说明的最大字节数,上限为30位。
压缩字段最长可以为16个字节。
表9给出了区位十进制和压缩十进制(30个数字长以内)字段的对应关系。
区位十进制的数字长度 压缩字段使用的字节数
1 1
2,3 2
4,5 3
.. .
.. .
.. .
28,29 15
30,31 16
注:仅允许使用30位数字。如果对16字节的压缩型字段使用位置计数法,必须使用PACKEVEN键字,否则就做为30位来定义。
例如,用来读一个输入字段长度为5个字节的压缩型十进制格式(在输入或数据描述规范表上所指出)。则这个字段中的数字是2×5-1或9个。因此,当在计算规范表中使用该字段时,结果字段必须是9位长。在定义规范表中的键字“PACKEVEN”用来表明当用From-to位的压缩型字段时想用哪两个长度而不是数字的个数。
2.1.2.3区位十进制格式
区位十进制格式指的是存储器的每个字节含有一个数字或一个字符。在区位十进制格式中,存储器中的每个字节都分为两部分:一部分为4位区部分,另一部分为4位数字部分。区位十进制格式象这样:
0 7 0 7 0 7 0 7 0 7
区 数字 区 数字 区 数字 区 数字 区 数字
字节 1101=负号(十六进制D)
1111=正号(十六进制F)
低位字节的区位部分指出十进制数字的符号(+或-),使用的标准符号是:正数用十六进制F而负数用十六进制D。用区位二进制格式,十进制数中的每个数字指出一个区位部分;但仅低位的区部分作为符号来使用。2.1.2.4.2的图40表示了十进制数8191在区位十进制格式中的样子。
当在输出规范表的40-43列上指出所用字段的结束位置并且该字段以压缩格式输出时,必须考虑字段长度的改变。字段压缩之后要计算它的长度,运用下列公式:
n
字段长度= +1
2
这里,n=区位十进制字段中数字的个数(忽略除后的余数)。
对于一个程序描述文件,区位十进制格式是在输入规范表的36列上规定,在输出规范表的52列,或在定义规范表的40列上用一个空格来指定。对于外部描述文件,在数据描述规范表的35列上指定数据格式。
对于区位十进制格式可以指定一个替换符号格式。用替换符号格式,数字型字段的前面或后面要紧接+或-号。加号是十六进制的4E,减号是十六进制的60。
当指定替换符号格式时,字段长度(在输入规范表中指定的),一定有一位表示附加位。例如,如果一个字段是5位长,并且指定了替换符号格式,那么它要有6位长。 |
|