数字电路码制详解

数字电路码制详解:从原码到BCD码的完整指南


前言

在数字电路中,我们不仅要解决"用什么进制"的问题,还要解决"如何编码"的问题。

进制解决的是计数规则 (逢几进一),而码制解决的是表示规则(用哪些二进制位表示什么含义)。

本文将系统讲解数字电路中常用的各种码制,包括原码、反码、补码、BCD码、格雷码等,帮助你彻底搞清楚这些概念。


目录


码制与进制的区别

核心区分

概念 解决的问题 例子
进制 逢几进一?计数规则是什么? 二进制、八进制、十进制、十六进制
码制 用什么编码表示?含义是什么? 原码、反码、补码、BCD码、格雷码

举例说明

同样是二进制数 1010

  • 作为无符号二进制数:表示十进制 10
  • 作为4位原码:表示十进制 -2(最高位为符号位)
  • 作为8421BCD码:表示十进制 10
  • 作为格雷码:表示十进制 11

同一个二进制位组合,不同码制下含义完全不同!


机器数与真值

定义

术语 定义 例子
真值 实际的数值(带正负号) +5、-3、+127
机器数 计算机中存储的二进制表示 0101、1101、01111111

关键点

  • 机器数是二进制形式 ,真值是实际含义
  • 机器数的最高位 通常作为符号位
    • 0 表示正数
    • 1 表示负数
  • 其余位表示数值位

示例(8位机器数)

机器数 符号位 数值位 真值(原码解释)
0000 0101 0 000 0101 +5
1000 0101 1 000 0101 -5
0111 1111 0 111 1111 +127
1111 1111 1 111 1111 -127

原码、反码、补码

这是计算机中表示有符号整数的三种编码方式。

一、原码(Sign-Magnitude)

定义:符号位 + 绝对值的二进制表示

规则

  • 正数:符号位为0,数值位为该数的二进制
  • 负数:符号位为1,数值位为该数绝对值的二进制

示例(8位)

真值 原码
+5 0000 0101
-5 1000 0101
+0 0000 0000
-0 1000 0000

原码的问题

  1. 零有两种表示:+0 和 -0
  2. 运算复杂:加减法需要判断符号,硬件实现麻烦

二、反码(Ones' Complement)

定义:正数同原码,负数为原码数值位按位取反

规则

  • 正数:与原码相同
  • 负数:符号位为1,数值位为原码数值位按位取反

示例(8位)

真值 原码 反码
+5 0000 0101 0000 0101
-5 1000 0101 1111 1010
+0 0000 0000 0000 0000
-0 1000 0000 1111 1111

反码的问题

  1. 零仍然有两种表示
  2. 运算时需要循环进位

三、补码(Two's Complement)⭐ 最重要

定义:正数同原码,负数为反码加1

规则

  • 正数:与原码相同
  • 负数:反码 + 1,或等价地,原码数值位取反后加1

示例(8位)

真值 原码 反码 补码
+5 0000 0101 0000 0101 0000 0101
-5 1000 0101 1111 1010 1111 1011
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000
-128 --- --- 1000 0000

补码的优点

  1. 零只有一种表示
  2. 加减法统一:减法变成加负数
  3. 符号位参与运算:不需要单独处理

补码的快速求法

负数补码的简便求法

从右向左,第一个1及其右边保持不变,左边按位取反。

示例:求 -5 的8位补码

复制代码
+5 的原码:0000 0101
从右向左找第一个1:0000 0101
                     ↑
该位及右边不变,左边取反:1111 1011

为什么计算机用补码

核心原因

  1. 统一加减法运算

减法可以转化为加法:

复制代码
5 - 3 = 5 + (-3)

在补码系统中:

复制代码
  0000 0101  (+5)
+ 1111 1101  (-3)
-----------
  0000 0010  (+2)  ← 结果正确!
  1. 零的唯一表示

补码中,零只有一种表示(0000 0000),避免了原码和反码的"正零负零"问题。

  1. 扩大表示范围

n位补码的表示范围:

  • 原码/反码:-(2^(n-1) - 1) 到 +(2^(n-1) - 1)
  • 补码:-2^(n-1) 到 +(2^(n-1) - 1)

例如8位:

  • 原码/反码:-127 到 +127
  • 衡码:-128 到 +127(多表示一个 -128)

BCD码(二-十进制编码)

什么是BCD码?

BCD码用4位二进制 表示1位十进制数字。

常用BCD码类型

1. 8421BCD码(最常用)
十进制 8421BCD 权值解释
0 0000 0×8+0×4+0×2+0×1
1 0001 0×8+0×4+0×2+1×1
2 0010 0×8+0×4+1×2+0×1
3 0011 0×8+0×4+1×2+1×1
4 0100 0×8+1×4+0×2+0×1
5 0101 0×8+1×4+0×2+1×1
6 0110 0×8+1×4+1×2+0×1
7 0111 0×8+1×4+1×2+1×1
8 1000 1×8+0×4+0×2+0×1
9 1001 1×8+0×4+0×2+1×1

注意 :1010~1111 这6种组合在8421BCD中是非法码

2. 5421BCD码
十进制 5421BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 1000
6 1001
7 1010
8 1011
9 1100
3. 2421BCD码
十进制 2421BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 1011
6 1100
7 1101
8 1110
9 1111

BCD码的应用

  • 数字显示(数码管)
  • 金融计算(避免浮点误差)
  • 十进制运算电路

格雷码

什么是格雷码?

格雷码是一种相邻两个码只有一位不同的编码方式。

4位格雷码表

十进制 二进制 格雷码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

格雷码的特点

  1. 相邻性:任意相邻两个格雷码只有一位不同
  2. 循环性:首尾格雷码也只有一位不同
  3. 反射性:具有镜像对称结构

二进制转格雷码

G i = B i ⊕ B i + 1 G_i = B_i \oplus B_{i+1} Gi=Bi⊕Bi+1

即:格雷码的第i位 = 二进制码的第i位 异或 二进制码的第i+1位

示例:二进制 1011 → 格雷码?

复制代码
B3 B2 B1 B0 = 1  0  1  1
G3 G2 G1 G0 = 1⊕0  0⊕1  1⊕1  1
           = 1    1    0    1

答案:1101

格雷码的应用

  • 编码器(避免跳变误差)
  • 位置传感器
  • 模数转换

奇偶校验码

原理

在数据位后增加一位校验位,使整个码中"1"的个数为奇数或偶数。

奇校验 vs 偶校验

类型 规则
奇校验 数据位 + 校验位 中"1"的个数为奇数
偶校验 数据位 + 校验位 中"1"的个数为偶数

示例

数据 1的个数 奇校验位 偶校验位
1010 2(偶) 1 0
1011 3(奇) 0 1
1100 2(偶) 1 0

局限性

  • 只能检测奇数个错误
  • 不能纠错
  • 不能检测偶数个错误

码制对照表

常用编码对照(十进制 0~9)

十进制 二进制 8421BCD 格雷码 奇校验码
0 0000 0000 0000 00001
1 0001 0001 0001 00010
2 0010 0010 0011 00101
3 0011 0011 0010 00110
4 0100 0100 0110 01001
5 0101 0101 0111 01010
6 0110 0110 0101 01100
7 0111 0111 0100 01111
8 1000 1000 1100 10001
9 1001 1001 1101 10010

典型例题

例题一:求补码

求十进制数 -37 的8位补码。

【解】

第一步:求 +37 的原码

+37 = 32 + 4 + 1 = 0010 0101

第二步:求反码(数值位取反)

0010 0101 → 1101 1010

第三步:求补码(反码 + 1)

1101 1010 + 1 = 1101 1011

【答案】:1101 1011


例题二:补码转真值

已知8位补码为 1110 0110,求其真值。

【解】

第一步:判断符号位

最高位为1,是负数

第二步:求原码

补码 → 反码(减1):1110 0110 - 1 = 1110 0101

反码 → 原码(数值位取反):1110 0101 → 1001 1010

第三步:求真值

原码数值位:001 1010 = 32 + 8 + 2 = 26

符号位为1,所以真值为 -26

【答案】:-26


例题三:8421BCD码转换

将十进制数 59 转换为8421BCD码。

【解】

5 → 0101

9 → 1001

【答案】:0101 1001


总结与记忆口诀

核心概念速记

码制 核心特点
原码 符号位 + 绝对值,零有两种表示
反码 正同原,负取反,零有两种表示
补码 正同原,负取反加一,零唯一,计算机必用
BCD码 4位二进制表示1位十进制
格雷码 相邻只有一位不同
奇偶校验 增加1位使"1"的个数为奇/偶

补码求法口诀

正数补码同原码,负数反码加个一
快速求法看右边,第一个1左边翻

BCD码口诀

8421权值要记牢,四位二进表十进
1010以后非法码,只有零到九有效

格雷码口诀

相邻只变一位数,二进异或得格雷


相关推荐
kernelcraft3 小时前
Matlab读取CSV数据并处理:从入门到实战的完整指南
开发语言·其他·matlab
老陈头聊SEO12 小时前
AI技术在SEO关键词策略中的创新应用探讨
其他·搜索引擎·seo优化
YWamy13 小时前
音视频技术方案选型全景指南:音视频SDK适配三大核心场景全解析
其他
风途_说气象水文1 天前
便携式综合气象仪:掌中方寸间的气象管家!
其他·气象站
老陈头聊SEO1 天前
利用长尾关键词实现SEO优化的有效途径与策略探讨
其他·搜索引擎·seo优化
2501_927012572 天前
相机照片详细参数怎么修改?4款工具,新手零失误
经验分享·其他
执欣之手2 天前
Thalssitc Triaos
其他
视频技术分享2 天前
主流音视频SDK深度对比:不同场景该怎么选?
其他
深圳帝王星科技3 天前
NE6501 4.5-20V输入,内置MOS,功率5瓦
其他