我正在阅读以下声明,我不知道为什么我们必须使用奇数位的压缩十进制数?以下陈述是否正确,您在硬件中只能有奇数位数?你能给我一个例子来说明它为什么这么说吗?
RULES(NOEVENPACK)此编译器选项会告诉您是否 偶然在偶数内定义一个Pack Decimal数据项 数字。您只能在硬件中使用奇数位数。如果你 有一个字节你有一个数字,2个字节你有3个数字,3个字节 - > 5位数。
答案 0 :(得分:3)
在压缩十进制字段中,最右边的半字节(nybble)是符号位置。字段中的每个其他半字节都是一个数字,0-9。
这意味着压缩十进制字段占用的存储空间表示奇数位数。你别无选择。
如果您定义PACKED-DECIMAL PIC 9(4)
,则
?NNNNS
其中N是一个数字(参见,其中有四个)并且S是符号(因为该字段被定义为无符号,它将具有F的符号,其总是被视为正数。)
那是怎么回事?它不可能存在。由于它不存在,编译器必须生成代码,使其只能包含零,这不会影响字段的值。如果您定义PACKED-DECIMAL PIC 9(5)
,则
NNNNNS
五位数字,符号,以及编译器无需担心的任何其他内容。除了该字段所需的代码之外,没有生成任何代码。
所以你的代码运行得更快。
您可能想知道"这有多重要?"。如果你考虑一下程序中可能会看到多少个压缩十进制字段,如果每次都引用它们,每次引用时都有代码使第一个数字为零,那么你就会得到相当多的代码。通过该计划。
在大型机上,您通常会为资源使用付费。如果你在5,000个程序中避免这种情况,这些程序每年365天一天处理10,000,000个交易,那么它就会增加。