Skip to main content

01A. 数字系统与二进制编码基础与运算

1. 数字信号与数字系统基础

  • 信号 (Signal): 用于表示和传递信息的物理量。
    • 模拟信号 (Analog Signal): 幅度和频率连续变化的波形。
    • 数字信号 (Digital Signal): 只有 ON (1) 和 OFF (0) 两种状态的离散波形。
  • 比特 (Bit): 二进制数字 (binary digit) 的缩写,是信息的基本单位。
    • 1: 代表高电平 (HIGH) 或真 (TRUE)。
    • 0: 代表低电平 (LOW) 或假 (FALSE)。
  • 逻辑电平 (Logic Levels): 在电路中,用一个电压范围来表示 01,例如 为低电平, 为高电平。

2. 核心数制及其转换

数字系统中常用的数制包括十进制 (Decimal, base-10)、二进制 (Binary, base-2)、八进制 (Octal, base-8) 和十六进制 (Hexadecimal, base-16)。

2.1. 任意进制 (Radix-r) 转换为十进制

核心方法:按权展开求和 (Positional Number System)。 一个具有 位整数和 位小数的 进制数,其值为: 其中 是该数位上的数字, 是基数 (Radix),小数点左侧第一位是 ,右侧第一位是

  • 最高有效位 (Most-Significant Digit, MSD): 最左边的数字。
  • 最低有效位 (Least-Significant Digit, LSD): 最右边的数字。

【用例】 将二进制数 转换为十进制:

2.2. 十进制转换为任意进制 (Radix-r)

核心方法:整数部分和小数部分分开处理。

  1. 整数部分:除基取余法

    • 将十进制整数反复除以目标基数
    • 每次的余数作为新数制的一位,直到商为 0。
    • 注意:将余数从下往上(从最后一次的余数到第一次的余数)排列,即为转换结果(从 MSB 到 LSB)。
  2. 小数部分:乘基取整法

    • 将十进制小数反复乘以目标基数
    • 每次的整数部分作为新数制的一位,取剩下的小数部分继续。
    • 注意:将整数从上往下(从第一次的整数到最后一次的整数)排列,即为转换结果(从 MSB 到 LSB)。

【用例】 将十进制数 转换为二进制:

  • 整数部分 (35):

    • (LSB)
    • (MSB)
    • 结果 (从下往上读):
  • 小数部分 (0.375):

    • 整数部分为 0 (MSB)
    • 整数部分为 1
    • 整数部分为 1 (LSB)
    • 结果 (从上往下读):
  • 最终结果:

2.3. 二、八、十六进制间的快速转换

核心方法:利用 的关系进行分组转换。

  • 二进制 八进制:

    • 以小数点为界,整数部分向左、小数部分向右,每 3 位二进制数分为一组,不足 3 位的用 0 补齐。
    • 每组独立转换为一位八进制数。
  • 二进制 十六进制:

    • 以小数点为界,整数部分向左、小数部分向右,每 4 位二进制数分为一组,不足 4 位的用 0 补齐。
    • 每组独立转换为一位十六进制数。
  • 八进制 十六进制:

    • 先转换为二进制作为中间步骤。

【用例】 转换为八进制和十六进制:

3. 二进制运算与补码

3.1. 二进制加减法

  • 加法: 与十进制加法类似,逢二进一。
  • 减法: 与十进制减法类似,需要向高位借位。但电路实现复杂。

3.2. 补码 (Complement)

核心目的将减法运算转换为加法运算,从而简化计算机硬件设计

进制类型中文名定义 ( 为数值, 为位数, 为基数)快速求法
二进制(r-1)'s反码 (1's Complement)各位取反 (0 变 1,1 变 0)
r's补码 (2's Complement)反码加一从右向左找到第一个 1,该 1 及其右边不变,左边各位取反
十进制(r-1)'s9's Complement 个 9 减去原数
r's10's Complement9's Complement 加一

【重点】二的补码 (2's Complement) 求法 对于二进制数 10110000:

  1. 方法一 (反码加一):
    • 反码: 01001111
    • 加一: 01001111 + 1 = 01010000
  2. 方法二 (保留首个 1):
    • 从右向左找到第一个 1: 1011**0000**
    • 1 及其右边的位保持不变: ....**0000** (错误,应为 10000)
    • 正确应为:从右向左,遇到的第一个 1 及其右边的所有位保持不变,该 1 左边的所有位取反。
    • 10110000 -> 从右向左第一个 1 在第 5 位。
    • 101 10000 -> 10000 不变,101 取反为 010
    • 结果: 01010000

3.3. 使用补码进行减法

核心算法:

  • 前提: 必须有相同的位数,不足则在高位补 0。
  • 步骤:
    1. 求减数 的补码(通常是 2's complement)。
    2. 被减数 加上 的补码。
    3. 根据结果判断:
      • 如果产生最高位进位 (End Carry),则舍弃该进位,结果为正
      • 如果没有最高位进位,则结果为负,其值为对当前结果再次求补码

【用例】 使用 7 位二进制数和 2's complement 计算 ,其中 ,

  • 计算 ():

    1. 的 2's complement:
      • 的反码: 0111100
      • 的补码: 0111101
    2. 相加:
    3. 结果:有最高位进位 1,舍弃。结果为正,即
  • 计算 ():

    1. 的 2's complement:
      • 的反码: 0101011
      • 的补码: 0101100
    2. 相加:
    3. 结果:无最高位进位。结果为负,其大小需对 1101111 再次求 2's complement。
      • 1101111 的反码: 0010000
      • 加一: 0010001
    4. 最终结果为

4. 带符号二进制数表示法

为了在二进制中表示正负数,通常将最高有效位 (MSB) 作为符号位

  • 0: 正数
  • 1: 负数

【重点】三种带符号数表示法的对比 (以 8 位为例)

表示法正数表示 (+X)负数表示 (-X)特点
原码 (Sign-Magnitude)符号位为 0,其余位为数值的绝对值。符号位为 1,其余位为数值的绝对值。- 直观,但加减法规则复杂。
- 有两个 0 的表示 (+0-0)。
反码 (Signed-1's Complement)与原码相同。符号位为 1,其余位为数值绝对值的反码- 加减法比原码简单。
- 仍有两个 0 的表示 (+0-0)。
补码 (Signed-2's Complement)与原码相同。符号位为 1,其余位为数值绝对值的补码- 加减法统一,硬件实现最简单。
- 只有一个 0 的表示
- 表示范围比原码和反码多一个负数。

【用例】 用 8 位二进制表示

  • 正数 : 三种表示法都相同
    • 01101001
  • 负数 :
    • 原码: 11101001 (符号位变 1)
    • 反码: 10010110 (数值位 1101001 取反)
    • 补码: 10010111 (反码 10010110 加 1)

为什么现代计算机普遍使用补码?

特性原码反码补码
加法运算规则复杂规则复杂 (需循环进位)规则统一,可直接相加
0 的表示0000100000001111唯一 0000
N 位表示范围

5. 其他二进制编码

5.1. BCD 码 (Binary-Coded Decimal)

  • 定义: 用 4 位二进制数来表示一位十进制数 (0-9)。也称 8421 码
  • 特点:
    • 0011 1001 0110 代表十进制数 396
    • 4 位二进制组合 10101111 是无效的 BCD 码。
  • BCD 加法:
    1. 按二进制加法规则对位。
    2. 如果任意一组 4 位数的结果大于 9,或者产生了向高一组的进位,则该组需要修正
    3. 修正方法: 对该组加 6 (即 0110 )
      • 原因: 二进制加法是逢 16 进位,而 BCD 码需要逢 10 进位,加 6 是为了跳过 6 个无效状态,从而实现正确的进位。

【用例】 计算 的 BCD 码

5.2. 格雷码 (Gray Code)

  • 特点: 相邻两个数值之间只有一位二进制数不同
  • 应用: 减少数据转换过程中的瞬时错误、低功耗设计、模拟数据编码。

5.3. ASCII 码

  • 全称: American Standard Code for Information Interchange (美国信息交换标准代码)。
  • 用途: 用一个唯一的二进制数(通常是 7 位)表示数字、字母、标点符号和控制字符,共 128 个。

5.4. 奇偶校验码 (Error-Detecting Code)

  • 目的: 检测数据在传输或存储过程中是否发生错误。
  • 方法: 在原始数据上附加一位校验位 (Parity Bit)
    • 偶校验 (Even Parity): 附加一位,使得整个编码中 1 的个数为偶数。
    • 奇校验 (Odd Parity): 附加一位,使得整个编码中 1 的个数为奇数。
  • 局限性: 只能检测出奇数个位的错误,无法检测出偶数个位的错误,也无法纠正错误。

6. 二进制逻辑入门

  • 定义: 处理只有两个值(01)的变量的逻辑体系。
  • 基本逻辑运算:
运算符号描述逻辑门真值表 (A, B 为输入, Y 为输出)
与 (AND) 或 省略所有输入为 1,输出才为 1与门A=0, B=0, Y=0
A=0, B=1, Y=0
A=1, B=0, Y=0
A=1, B=1, Y=1
或 (OR)任一输入为 1,输出就为 1或门A=0, B=0, Y=0
A=0, B=1, Y=1
A=1, B=0, Y=1
A=1, B=1, Y=1
非 (NOT)输入与输出相反非门A=0, Y=1
A=1, Y=0