我来自c ++和java,现在我正在阅读关于PL / 1的书,并且在理解数据类型方面存在一些问题。 首先是固定箱。据我所知,实际上有4种固定的箱型。他们是:
固定bin(7,n) - 1个字节
固定bin(15,n) - 2字节
固定bin(31,n) - 4字节
固定bin(63,n) - 8字节
如果我在我的程序中写入例如固定bin(10,n),它将被"转换"到固定bin(15,n)导致PC / mainfraim只能保存整个字节的数字。 据我所知,还有固定的dec(m,n)数据类型。但这些"神奇的数字"是什么?固定分频为1,2,4,8字节?内部表示在固定bin的内存中,固定的dec是相同还是不同?
关于浮动。 什么是神奇的浮箱和浮动十进制数?它们的字节数是多少?浮点数和浮点数的内部表示是否相等/不同?
我发现只有浮点数dec(33)(我想是16个字节)。并且浮箱(21) - 4个字节,(53) - 8个字节。
答案 0 :(得分:3)
正如您已经注意到FIXED BINARY
的“幻数”总是小于(2的幂)字节中的位数。由于符号位,“少一个”在那里。所以很容易理解,对于FIXED BINARY UNSIGNED
,边界移动了一个,分别为8,16,32,64。
FIXED DECIMAL
的内部表示可能看起来有点不寻常,如果你不是来自大型机背景,因为它使用打包的BCD(二进制编码的十进制),其中每个十进制数字占用4位,符号是由另外4位(十六进制D
为负,十六进制C
或F
正)表示。因此+1287
的内部表示将是(十六进制)01 28 7C
。内部长度也不一定是2的幂,所以你可能会说FIXED DECIMAL
的“幻数”都是奇数,因为它们完全填满整个字节数,而偶数则留下最左边的半字节数未使用。
对于BINARY FLOAT
数据,处理器(我假设您在System z硬件上运行)知道三种内部类型:短,长和扩展精度分别占用4,8或16个字节。 Short用于高达21的精度,精度高达53的精度,延伸到任何更大的精度。
DECIMAL FLOAT
事情会变得复杂一些,因为它取决于编译器是否可以利用内部十进制浮点(DFP)设备。如果短和长精度的上限可以是7和16,如果它不能使用它,它将使用二进制内部表示,精度边界是6和16(因为精度现在意味着十进制数字)。
来源:所有这些边界都来自企业PL / I for z / OS V4.5语言参考。