我来自c++和java,现在我正在读一本关于PL/1的书,在理解数据类型方面有一些问题。首先是固定仓位。据我所知,实际上有4个固定的仓位类型。它们是:
固定bin(7,n) -- 1个字节
固定bin(15,n) -- 2个字节
固定bin(31,n) -- 4字节
固定bin(63,n) -- 8字节
如果我在我的程序中写,例如fixed bin(10,n),它将被“转换”成fixed bin(15,n),因为PC/mainfraim只能保存整字节的数字。据我所知,还有固定的dec(m,n)数据类型。但是,对于固定的1,2,4,8字节,这些“神奇的m数”是什么呢?内存中固定bin和固定十进制的内部表示是相等还是不同?
和关于float。什么是神奇的浮点数和浮点数?它们是多少个字节?内部表示的浮点数和浮点数是否相等/不同?
我发现只有float dec(33) (我想是16字节)。以及浮点数bin(21) -4字节,(53) -8字节。
发布于 2017-02-22 15:52:31
正如您已经注意到的,FIXED BINARY的“魔术数字”总是比字节(2的幂)中的位数少1。“少一个”是因为符号位。因此,很容易理解,对于FIXED BINARY UNSIGNED,边界移动了1,并且分别是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,long用于精度达到53,extended用于任何更大的精度。
对于DECIMAL FLOAT,事情变得有点复杂,因为这取决于编译器是否能够利用内部的十进制浮点(DFP)设备。如果可以,短精度和长精度的上限是7和16,如果不能使用,它将使用二进制内部表示,精度界限是6和16 (因为精度现在意味着十进制数字)。
来源:所有这些界限都来自Enterprise PL/I for z/OS V4.5语言参考。
https://stackoverflow.com/questions/42375949
复制相似问题