【问题标题】:PL/1 fixed and float, dec and bin data types. Difference between dec and bin. How many bytes?PL/1 固定和浮点、dec 和 bin 数据类型。 dec 和 bin 的区别。多少字节?
【发布时间】:2018-07-11 23:17:16
【问题描述】:

我来自 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 字节的固定十进制数,这些“神奇的 m 数”是什么?固定 bin 和固定 dec 内存中的内部表示是相同还是不同?

关于浮动。 什么是神奇的 float bin 和 float dec m 数字?它们是多少字节? float bin 和 float dec 的内部表示是否相等/不同?

我发现只有 float dec(33)(我认为是 16 个字节)。并且 float bin(21) - 4 个字节,(53) - 8 个字节。

【问题讨论】:

    标签: zos pl-i


    【解决方案1】:

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

    如果您不是来自大型机背景,FIXED DECIMAL 的内部表示可能看起来有点不寻常,因为它使用压缩 BCD(二进制编码的十进制),其中每个十进制数字占用 4 位,符号由另外4位(十六进制D为负,十六进制CF正)。所以+1287 的内部表示将是(以十六进制表示)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 语言参考。

    【讨论】:

    • 非常感谢!但是精度 21 和 53 对二进制浮点数意味着什么?这是否意味着有多少个二进制数字代表尾数?我应该为 16 字节二进制浮点数提供什么值?
    • 应该是这个意思,但是限制有点奇怪,因为操作原理将“分数”描述为具有 23 re 52 位。使用BIN FLOAT(54),您应该已经获得了一个 16 字节的变量。
    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多