2

I came from c++ and java and now I am reading book about PL/1 and have some problems with understanding data types. First is fixed bin. As I understand actually there are 4 fixed bin types. They are:

fixed bin(7,n) -- 1 byte

fixed bin(15,n) -- 2 byte

fixed bin(31,n) -- 4 byte

fixed bin(63,n) -- 8 byte

If I write in my program for example fixed bin(10,n) it will be "converted" into fixed bin(15,n) cause PC/mainfraim can hold numbers only in whole bytes. As I know there are also fixed dec(m,n) data types. But what is these "magical m numbers" for fixed dec of 1,2,4,8 bytes? Is internally representation in memory of fixed bin and fixed dec equal or different?

And about float. What are magical float bin and float dec m numbers? For how many bytes they are? And is internally representation of float bin and float dec equal/different?

I found only float dec(33) (16 bytes i think). And float bin(21) - 4 bytes, (53) - 8 bytes.

4

1 回答 1

4

正如您已经注意到的那样,“幻数”FIXED BINARY总是比(2 的幂)字节中的位数少一。由于符号位,“少一个”在那里。所以很容易理解,对于FIXED BINARY UNSIGNED边界移动了1,分别为8、16、32、64。

如果您不是来自大型机背景,则的内部表示FIXED DECIMAL可能看起来有点不寻常,因为它使用压缩 BCD(二进制编码的十进制),其中每个十进制数字占用 4 位,符号由另外 4 位表示(十六进制D为负数、十六进制数CF正数)。所以内部表示+1287将是 (in hex) 01 28 7C。此外,内部长度不必是 2 的幂,因此您可能会说“幻数”FIXED DECIMAL都是奇数,因为它们完全填充了整个字节数,而偶数则使最左边的半字节未使用。

对于BINARY FLOAT数据,处理器(我假设您在 System z 硬件上运行)知道三种内部类型:短精度、长精度和扩展精度,分别占用 4、8 或 16 个字节。Short 用于最高 21 的精度,long 用于最高 53 的精度,扩展用于更高的精度。

事情变得有点复杂,因为DECIMAL FLOAT这取决于编译器是否可以利用内部十进制浮点 (DFP) 设备。如果可以,短精度和长精度的上限是 7 和 16,如果不能使用,它将使用二进制内部表示,精度范围是 6 和 16(因为精度现在意味着十进制数字)。

来源:所有这些边界都来自 Enterprise PL/I for z/OS V4.5 Language Reference。

于 2017-02-22T07:52:30.513 回答