2.4.1十进制数的编码
1. 基本概念
- 背景:十进制数在计算机中以二进制形式存储。为了高效表示和运算,发展了“二进制编码的十进制数”(BCD码)。
- 核心思想:用4位二进制编码1位十进制数(0~9),但4位二进制可表示16种状态,有6种冗余。
- 应用场景:需要保持十进制格式优势的领域(如财务计算、数字显示)。
2. 常见BCD编码类型
以下是四种主要的BCD编码方式及其特点:
(1) 8421码(自然BCD码)
-
权值:8、4、2、1。
-
特点:
- 直接映射十进制数的二进制形式。
- 冗余状态:1010~1111为非法。
-
编码示例:
十进制 18 | 8421码 |
---|---|
0 | 0000 |
5 | 0101 |
9 | 1001 |
- 缺点:缺乏自补性,不适合某些算术运算。
(2) 2421码
-
权值:2、4、2、1。
-
特点:
- 自补码:对9的补数只需按位取反(如3的2421码为0011,6为1100)。
- 冗余状态:0101~1010为非法。
-
编码示例:
十进制 18 | 2421码 |
---|---|
0 | 0000 |
3 | 0011 |
6 | 1100 |
- 优势:适合十进制加减运算,减少转换错误。
(3) 余3码
- 规则:在8421码基础上加0011(十进制3)。
- 特点:
- 自补码,冗余码为00000010、11011111。
- 无权码,对误差不敏感。
- 编码示例:
十进制 18 | 余3码 |
---|---|
0 | 0011 |
5 | 1000 |
9 | 1100 |
(4) 格雷码(循环码)
- 规则:相邻两个数仅有一位不同(可靠性高)。
- 特点:
- 减少数据传输中的瞬时错误。
- 无权码,需单独译码。
- 编码示例:
十进制 18 | 格雷码 1 |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0011 |
3. 压缩与非压缩十进制数串
- 非压缩十进制数串:每个字节存放一个字符的ASCII码(如’5’ → 0x35)。
- 格式:符号在数值前或嵌入最后一位。
- 压缩十进制数串:用BCD编码存储,一个字节存两位十进制数。
- 符号处理:末4位表示符号(CH为+,DH为-)。
示例:
- +123的压缩表示:
0001 0010 0011 1100
(末尾C表示正)。 - -2648的压缩表示:
00000010 01100100 10001101
。
4. BCD编码性能对比
编码类型 | 权值 | 自补性 | 冗余状态 | 适用场景 |
---|---|---|---|---|
8421码 | 8,4,2,1 | 无 | 1010~1111 | 常规十进制表示 |
2421码 | 2,4,2,1 | 有 | 0101~1010 | 自补运算(如减法) |
余3码 | 无权 | 有 | 0000~0010, 1101~1111 | 容错性要求高 |
格雷码 | 无权 | 无 | 根据实现不同 | 数据传输可靠性 |
5. 实际应用示例
例1:十进制数5382的编码
- 8421码:
0101 0011 1000 0010
- 余3码:
1000 0110 1011 0101
例2:压缩BCD码的符号处理
-2648
→00000010 01100100 10001101
- 拆分:26 (BCD:00000010)、48 (BCD:10001101末尾D表示负)。
6. 总结
通过系统学习,可深入理解不同BCD编码的设计逻辑,为后续的数值运算和存储奠定基础。
2.4.2十进制数串
一、十进制数串的定义
计算机中需保持十进制数的直观性,用 字符串形式 存储处理的数值。其特点:
- 长度不固定:支持可变长度数值
- 两种存储形式:非压缩十进制数串与压缩十进制数串
- 符号处理:符号位可位于数据首或数据尾
二、非压缩十进制数串
1. 基本特点
- 定义:每个字节存放 1个十进制数或符号的ASCII码
- 符号位位置:
- 前分隔式:独立字节存放符号(
+
=2BH
,-
=2DH
) - 后嵌入式:符号嵌入最低数值位(正数不修改,负数将符号编码与最低位相加)
- 前分隔式:独立字节存放符号(
- 存储空间:占用连续多个字节,需标明起始地址和串长1
2. 示例
数字串 +59
的非压缩表示:
-
前分隔式:
+ → 2B H 5 → 35 H 9 → 39 H
-
后嵌入式(负数
-59
处理):5 → 35 H 9 → 39 H + 40 H (负号) = 79 H
3. 优点与不足
特点 | 说明 |
---|---|
优点 | 直观易读,适合非数值处理场景 |
缺点 | 存储效率低,运算需额外转换 |
应用场景 | 文本处理、数据展示 |
三、压缩十进制数串
1. 核心规则
-
定义:每个字节存放 2个BCD码,符号位半字节位于末尾1
-
存储规范:
- 数值+符号位总数须为偶数,奇数时高位补
0H
- 符号编码:
CH
表示正,DH
表示负
- 数值+符号位总数须为偶数,奇数时高位补
-
示例:
+1234
和-2648
+1234 → 01 23 4C -2648 → 00 26 48 DD
2. 内存存储示意图
3. 性能对比
特性 | 非压缩方式 | 压缩方式 |
---|---|---|
存储效率 | 低(1字节/数字) | 高(0.5字节/数字) |
运算支持 | 不适合直接运算 | 支持直接十进制运算 |
空间占用 | 冗余空间(仅低4位有效) | 无冗余 |
四、实际应用场景
- 财务系统:
- 金额需严格避免二进制转换误差,采用压缩格式存储
- 数据库储存:
- 如银行账户记录使用压缩BCD编码库存数据
- 主机构件通信:
- 文本协议(如JSON)使用非压缩格式,减少数据解析复杂度
五、总结
指标 | 非压缩十进制数串 | 压缩十进制数串 |
---|---|---|
存储方式 | ASCII字符序列 | 紧凑BCD编码 |
符号处理 | 显式符号位/嵌入式修改 | 末4位专用符号位 |
运算效率 | 低(需转换) | 高(直接硬件支持) |
典型应用 | 文本处理、日志记录 | 金融计算、核心事务处理 |
通过充分理解两种存储方式的特性,可在实际应用中平衡空间效率与处理性能的需求。