PL/1 固定和浮动、dec 和 bin 数据类型。 dec 和 bin 之间的区别。多少字节?
PL/1 fixed and float, dec and bin data types. Difference between dec and bin. How many bytes?
我来自 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),它将 "converted" 写入 fixed bin(15,n),因为 PC/mainfraim 只能以整字节形式保存数字。
据我所知,还有固定的 dec(m,n) 数据类型。但是这些 "magical m numbers" for fixed dec of 1,2,4,8 bytes 是什么? fixed bin 和 fixed dec 在内存中的内部表示相同还是不同?
关于浮动。
什么是神奇的 float bin 和 float dec m 数字?它们有多少字节?并且是 float bin 和 float dec 的内部表示 equal/different?
我只找到了 float dec(33)(我认为是 16 个字节)。和 float bin(21) - 4 个字节,(53) - 8 个字节。
正如您已经注意到的,FIXED BINARY
的 "magic numbers" 总是比(2 的幂)字节中的位数少一位。 "one less" 因为符号位而存在。所以很容易理解,对于FIXED BINARY UNSIGNED
,边界移动一位,分别是8,16,32,64。
如果您不是大型机背景,FIXED DECIMAL
的内部表示可能看起来有点不寻常,因为它使用压缩 BCD(二进制编码的十进制),其中每个十进制数字占用 4 位,并且符号由另外 4 位表示(十六进制 D
为负,十六进制 C
或 F
为正)。所以 +1287
的内部表示将是(十六进制)01 28 7C
。此外,内部长度不必是 2 的幂,因此您可以说 FIXED DECIMAL
的 "magic numbers" 都是奇数,因为它们完全填满了整个字节数,而偶数则留在最左边半字节未使用。
对于 BINARY FLOAT
数据,处理器(我假设您 运行 在 System z 硬件上)知道三种内部类型:分别占用 4、8 或 16 字节的短精度、长精度和扩展精度。 Short 用于最高 21 的精度,long 用于最高 53 的精度,extended 用于更高的精度。
DECIMAL FLOAT
事情变得有点复杂,因为这取决于编译器是否可以利用内部十进制浮点 (DFP) 设备。如果可以的话,短精度和长精度的上限是 7 和 16,如果不能使用,它将使用二进制内部表示,精度范围是 6 和 16(因为精度现在表示十进制数字)。
资料来源:所有这些边界都来自企业 PL/I 的 z/OS V4.5 语言参考。
我来自 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),它将 "converted" 写入 fixed bin(15,n),因为 PC/mainfraim 只能以整字节形式保存数字。 据我所知,还有固定的 dec(m,n) 数据类型。但是这些 "magical m numbers" for fixed dec of 1,2,4,8 bytes 是什么? fixed bin 和 fixed dec 在内存中的内部表示相同还是不同?
关于浮动。 什么是神奇的 float bin 和 float dec m 数字?它们有多少字节?并且是 float bin 和 float dec 的内部表示 equal/different?
我只找到了 float dec(33)(我认为是 16 个字节)。和 float bin(21) - 4 个字节,(53) - 8 个字节。
正如您已经注意到的,FIXED BINARY
的 "magic numbers" 总是比(2 的幂)字节中的位数少一位。 "one less" 因为符号位而存在。所以很容易理解,对于FIXED BINARY UNSIGNED
,边界移动一位,分别是8,16,32,64。
如果您不是大型机背景,FIXED DECIMAL
的内部表示可能看起来有点不寻常,因为它使用压缩 BCD(二进制编码的十进制),其中每个十进制数字占用 4 位,并且符号由另外 4 位表示(十六进制 D
为负,十六进制 C
或 F
为正)。所以 +1287
的内部表示将是(十六进制)01 28 7C
。此外,内部长度不必是 2 的幂,因此您可以说 FIXED DECIMAL
的 "magic numbers" 都是奇数,因为它们完全填满了整个字节数,而偶数则留在最左边半字节未使用。
对于 BINARY FLOAT
数据,处理器(我假设您 运行 在 System z 硬件上)知道三种内部类型:分别占用 4、8 或 16 字节的短精度、长精度和扩展精度。 Short 用于最高 21 的精度,long 用于最高 53 的精度,extended 用于更高的精度。
DECIMAL FLOAT
事情变得有点复杂,因为这取决于编译器是否可以利用内部十进制浮点 (DFP) 设备。如果可以的话,短精度和长精度的上限是 7 和 16,如果不能使用,它将使用二进制内部表示,精度范围是 6 和 16(因为精度现在表示十进制数字)。
资料来源:所有这些边界都来自企业 PL/I 的 z/OS V4.5 语言参考。