二进码十进数

在计算和电子系统中,二进制编码的十进制 (BCD) 是一类十进制数的二进制编码,其中每个数字由固定位数(通常为四位或八位)表示。 有时,特殊的位模式用于符号或其他指示(例如错误或溢出)。

在面向字节的系统(即大多数现代计算机)中,术语未压缩的 BCD 通常意味着每个数字的完整字节(通常包括符号),而压缩的 BCD 通常利用以下事实在单个字节中编码两个数字:四个 位足以表示 0 到 9 的范围。然而,精确的 4 位编码可能因技术原因而有所不同。

代表 BCD 数字的十个状态有时被称为四元组(因为通常需要保存它们的半字节也称为四元组),而未使用的、无关紧要的状态被命名为伪四元组(e)s、伪- 小数或伪小数。

与二进制位置系统相比,BCD 的主要优点是它更准确地表示和十进制数量的四舍五入,以及它易于转换为传统的人类可读表示。 它的主要缺点是实现基本算术所需的电路复杂性略有增加,存储密度略低。

BCD 用于许多早期的十进制计算机,并在 IBM System/360 系列及其后代、Digital Equipment Corporation 的 VAX、Burroughs B1700 和摩托罗拉 68000 系列处理器等机器的指令集中实现。 BCD 本身并没有像过去那样广泛使用,并且在较新的指令集(例如,ARM;长模式下的 x86)中不可用或受限。 然而,十进制定点和十进制浮点格式仍然很重要,并继续用于金融、商业和工业计算,其中不能容忍二进制浮点格式固有的细微转换和小数舍入误差。

背景

BCD 利用了任何一个十进制数字都可以用四位模式表示这一事实。 最明显的数字编码方式是自然 BCD (NBCD),其中每个十进制数字由其对应的四位二进制值表示,如下表所示。 这也称为 8421 编码。

此方案也可称为简单二进制编码十进制 (SBCD) 或 BCD 8421,是最常见的编码。 其他包括所谓的 4221 和 7421 编码——以用于位的加权命名——和 Excess-3。

下表表示各种 BCD 编码系统中从 0 到 9 的十进制数字。 在headers中,8 4 2 1表示每一位的权重。 在第五列 (BCD 8 4 −2 −1) 中,两个权重为负。 还显示了数字的 ASCII 和 EBCDIC 字符代码,它们是分区 BCD 的示例。

由于大多数计算机以 8 位字节处理数据,因此可以使用以下方法之一对 BCD 数进行编码:

  • Unpacked:每个十进制数字编码成一个字节,四位表示数字,其余位无意义。
  • 压缩:两个十进制数字被编码成一个字节,一个数字在最低有效半字节(位 0 到 3)中,另一个数字在最高有效半字节(位 4 到 7)中。

例如,使用未压缩的 BCD 对十进制数 91 进行编码会产生以下两个字节的二进制模式:

十进制:9 1二进制:0000 1001 0000 0001

在压缩 BCD 中,相同的数字将适合单个字节:

十进制:9 1二进制:1001 0001

因此,一个未压缩的 BCD 字节的数值范围是零到九(含),而一个压缩的 BCD 字节的数值范围是零到九十九(含)。

为了表示大于单个字节范围的数字,可以使用任意数量的连续字节。 例如,要使用 big-endian 格式以压缩 BCD 表示十进制数 12345,程序将编码如下:

十进制:0 1 2 3 4 5二进制:0000 0001 0010 0011 0100 0101

二进码十进数

此处,最高有效字节的最高有效半字节已编码为零,因此该数字存储为 012345(但格式化例程可能会替换或删除前导零)。 打包的 BCD 在存储使用方面比未打包的 BCD 更有效; 以解压缩格式编码相同的数字(前导零)将消耗两倍的存储空间。

移位和掩码操作用于打包或解包打包的 BCD 数字。 其他按位运算用于将数字转换为其等效的位模式或反转过程。

压缩 BCD

在压缩 BCD(或简单的压缩十进制)中,每个字节的两个半字节中的每一个都代表一个十进制数字。

0

点评

点赞

相关文章