十进制表示:分区十进制和打包十进制之间的不同用途



我正在学习计算机科学课程,当我阅读这些定义时,我明白了。但我不知道两个演讲有什么不同目的,为什么。以下是我的书中对目的的一些简短解释:

Zone decimal : hightly compatible with text data.
Packed decimal : faster computing speed.

我想知道的是:

1(在区域十进制表示中,有一个区域部分复制每个数字。为什么?我看这不是目的:(

2(为什么他们说区域十进制与文本数据兼容,为什么打包十进制更快。

谢谢:)

首先 - 你在哪里学习CS?这些术语来自 1960 年代,更常见的名称是 BCD(二进制编码十进制(

区域十进制对每个数字使用整个字节。这意味着您可以像打印文本一样打印一个数字(每个"字符"存储一个数字 0-9(,但由于只有 10 位数字,一个字节可以容纳 256 个不同的值,这有点浪费。

打包十进制使用4位可以存储16个不同值的事实。因此,您可以在一个字节中存储两位数(顶部 4 位和底部 4 位(。这仍然有点浪费,因为您只使用了一半的容量。但是只需移位和掩码操作即可轻松提取两位数。

如今,您几乎唯一能看到BCD的地方是一些低级硬件,您希望在不使用微处理器的情况下读取/x-mit数字。仅在晶体管中制作BCD计数器很容易

但是如果你想做任何数学运算,你要么必须像在纸上一样对每个数字进行长乘法 - 要么转换为常规整数并再次返回

这两种表示形式都失宠了,可能是因为它们不被 C 直接支持,因此所有系统都来自 Unix。

打包十进制在两个方面具有优势:由于占用的空间更少,它可以更快地离开总线并进入处理器,并且许多CISC指令集具有专用的算术指令。 引用 http://en.wikipedia.org/wiki/Packed_decimal#Packed_BCD

打包 BCD [二进制编码十进制] 在 COBOL 编程语言中作为 "COMPUTINGAL-3"(许多其他编译器采用的 IBM 扩展 供应商(或"打包十进制"(1985 COBOL 标准的一部分(数据 类型。除了 IBM System/360 及更高版本兼容的大型机, 打包的 BCD 是在本机指令集中实现的 来自数字设备公司的原始VAX处理器,是 巴勒斯公司中型系统系列的本机格式 大型机(源自 1950 年代的 Electrodata 200 系列(。

分区十进制(http://en.wikipedia.org/wiki/Zoned_decimal#Zoned_decimal(在穿孔卡上的字符及其在内存中的表示之间具有简单的映射,这也许可以解释您的教科书声称它"与文本数据高度兼容"。 正如维基百科文章所暗示的那样,这是一个在IBM大型机圈子里使用得更多的术语。 在minis上,我们倾向于称它为普通的十进制PIC 9数据。

"Zoned Decimal"在其自然环境中意味着与EBCDIC字符集兼容。

ASCII 将数字表示为 x'3x' -- x'39',显示为字符"0"到"9"。

EBCDIC 字符集(起源于 Hollerith 标点卡片(使用类似但不同的方案,其中 x'F0' 显示为字符 "0",x'F9' 显示为字符 '9'。

穿孔卡的固定长度为 80 个字符,在许多情况下,其中 10 或 12 个字符被记录类型标识符和序列号吃掉(如果你把一堆卡片掉在地板上,这一点非常重要!所以空间非常宝贵。不是在每个数字旁边输入"+"或"-"字符,而是在卡的顶部附近使用"overpunch"额外的孔来表示正数或负数,从而节省了一个字节。

这些打孔字符在EBCDIC中被编码为x"D0"到x'D9"表示-0到-9,x'C0'到x'C9'表示+0到+9,通常在数字的最后一位数字中。

因此,"分区十进制"格式。每个字节的前四位是区域,后四位是-42的"数字"被编码为x'F4D2'。这比其他任何事情都更像是一种约定,因为计算机无法对这种格式做任何事情。因此,在进行任何计算之前,需要将其编码为"打包"格式。 这很容易 'X'F4D2' -> x'042D' 主要是抓取最后一个区域然后从每个字节中提取"数字"四位的情况,然后可以将其转换为二进制。

在设计IBM大型机时,最大的用户群是银行、保险公司和公用事业公司。那里的大部分处理都遵循这种模式。

  • 阅读打孔卡。
  • 读取磁带记录。
  • 将每月付款添加到余额
  • 将新余额存储在磁带上
  • 打印新天平
大多数

计算涉及货币金额,大多数结果立即显示。很明显,如果机器可以直接对打包的十进制值进行算术,则可以避免几个昂贵的"转换为二进制"和"转换为十进制"指令。作为奖励,它可以轻松地将小数点放在正确的位置并执行任何小数舍入。因此,在实现本机打包十进制指令(零、加、减、乘、除、移位和舍入等(方面做了大量工作。

从那以后,这一直是 IBM 大型机的首选货币格式。

多年来,其他平台上的开发人员对大型机使用这种过时的格式嗤之以鼻,直到最近才开始意识到按照会计师和税务人员期望的标准进行定点十进制算术是多么困难。由于Mike_Cowlishaw和其他人的努力,世界其他地区已经赶上了古老的IBM 360,Java程序员现在可以使用BigDecimal 库正确计算销售税,该库基于旧的打包十进制格式的变体。

最新更新