Skip to content

408 计算机组成原理

408

计算机组成原理

CO-02-01 数制与编码(进制转换/BCD码/字符编码)


一、定位信息

项目内容
所属圈层核心层
考点热度M级(中频常考) — 近5年真题中以选择题形式出现2–3次,累计分值约2–4分;常与"补码表示""ASCII码""BCD码"等知识点结合出题
前置知识回顾了解十进制数的基本概念(位权、小数点),具备基本的乘除法运算能力即可衔接
知识网络定位本单元是第二章"数据的表示和运算"的起始基础,为后续定点数编码(CO-02-02)、补码运算(CO-02-03)和浮点数表示(CO-02-05)提供数制与编码的前置知识

二、知识点讲解

2.1 进位计数制

进位计数制是用一组固定的数字符号和统一的规则来表示数值的方法。日常使用十进制(Decimal),计算机内部使用二进制(Binary),编程中常用八进制(Octal)和十六进制(Hexadecimal)。

核心概念——基数与位权

  • 基数:一个数制中允许使用的数字符号个数。十进制基数为10(0–9),二进制基数为2(0–1)。
  • 位权:每一位上的数字所代表的实际值等于该数字乘以该位的权值。第 ii 位的权为 rir^irr 为基数)。

例如十进制数 365.25365.25 可展开为:

365.25=3×102+6×101+5×100+2×101+5×102365.25 = 3 \times 10^2 + 6 \times 10^1 + 5 \times 10^0 + 2 \times 10^{-1} + 5 \times 10^{-2}

二进制数 (1011.1)2(1011.1)_2 展开为:

(1011.1)2=1×23+0×22+1×21+1×20+1×21=11.510(1011.1)_2 = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} = 11.5_{10}

2.2 进制转换方法

2.2.1 任意进制 → 十进制:按权展开求和

将每一位的数字乘以对应位权,然后相加。

(1A3.F)16=1×162+10×161+3×160+15×161=256+160+3+0.9375=419.937510(1A3.F)_{16} = 1 \times 16^2 + 10 \times 16^1 + 3 \times 16^0 + 15 \times 16^{-1} = 256 + 160 + 3 + 0.9375 = 419.9375_{10}

2.2.2 十进制 → 任意进制

整数部分:除基取余法(短除法)

将十进制整数反复除以目标基数,取每次的余数,从最后一次余数开始(从高位到低位)排列。

:将 251025_{10} 转换为二进制

运算余数
25 ÷ 2121(最低位)
12 ÷ 260
6 ÷ 230
3 ÷ 211
1 ÷ 201(最高位)

从下往上读取余数:2510=(11001)225_{10} = (11001)_2

小数部分:乘基取整法

将十进制小数反复乘以目标基数,取每次乘积的整数部分,从高位到低位排列。

:将 0.6875100.6875_{10} 转换为二进制

运算整数部分小数部分
0.6875 × 2 = 1.37510.375
0.375 × 2 = 0.7500.75
0.75 × 2 = 1.510.5
0.5 × 2 = 1.010.0

从上往下读取整数:0.687510=(0.1011)20.6875_{10} = (0.1011)_2

⚠️ 注意:有些十进制小数无法精确转换为有限位二进制小数(如 0.1100.1_{10}),会出现无限循环,此时需要截断或舍入。

2.2.3 二进制 ↔ 八进制/十六进制的快速转换

由于 8=238 = 2^316=2416 = 2^4,可以直接按位分组转换:

  • 二进制 → 八进制:以小数点为界,每3位二进制数分为一组,不足补0,每组直接转为1位八进制数。
  • 二进制 → 十六进制:每4位一组。

(10110101.11)2(10110101.11)_2

  • 三位一组(八进制):(010 110 101 . 110)2=(265.6)8(010\ 110\ 101\ .\ 110)_2 = (265.6)_8
  • 四位一组(十六进制):(1011 0101 . 1100)2=(B5.C)16(1011\ 0101\ .\ 1100)_2 = (B5.C)_{16}

2.3 BCD码(Binary-Coded Decimal)

BCD码用4位二进制数来表示1位十进制数(0–9)。主要有以下几种:

编码名称编码规则特点
8421码(NBCD)每位二进制的权值分别为8、4、2、1,与自然二进制一致最常用;0–9的编码为0000–1001;10–15为非法码
余3码在8421码基础上加3(即0011)属于无权码;0→0011,9→1100;两个余3码相加恰好产生进位时结果需要修正
2421码每位权值为2、4、2、1有权码;具有自补性,0和9、1和8等互为按位取反

8421码的加法修正规则:两个8421码相加,若结果在1010–1111(即10–15)之间或产生进位,则需加6(0110)修正。

7+57 + 5 的8421码运算

  • 701117 \to 0111501015 \to 0101
  • 0111+0101=11000111 + 0101 = 1100(12,非法码)
  • 加6修正:1100+0110=100101100 + 0110 = 10010
  • 结果:(0001 0010)8421=1210(0001\ 0010)_{8421} = 12_{10}

2.4 字符编码

2.4.1 ASCII码

ASCII(American Standard Code for Information Interchange) 使用7位二进制编码,共表示128个字符:

范围编码(十进制)内容
控制字符0–31回车(CR=13)、换行(LF=10)、空格(SP=32)等
数字字符 '0'–'9'48–570的编码为48,即 (011 0000)2(011\ 0000)_2
大写字母 'A'–'Z'65–90A的编码为65
小写字母 'a'–'z'97–122a的编码为97

关键规律

  • 数字字符转数值:减去48(即字符'0'的编码),如 '5' − '0' = 53 − 48 = 5
  • 大写转小写:加32(或置第5位为1),如 'A'(65) + 32 = 'a'(97)
  • 小写转大写:减32(或清第5位为0)

2.4.2 汉字编码

汉字编码涉及多个层次:

编码类型说明
输入码拼音码、五笔码等,用于输入汉字
国标码(交换码)GB2312标准,每个汉字用2字节表示,每字节最高位为0
区位码将汉字排列在94×94的矩阵中,用区号和位号表示
机内码计算机内部存储汉字的编码,将国标码每字节最高位置1(加80H)

转换关系

  • 国标码 = 区位码 + 2020H(每字节加20H,即32)
  • 机内码 = 国标码 + 8080H(每字节加80H,即128)
  • 机内码 = 区位码 + A0A0H

2.5 校验码基础(支撑层补充)

为后续理解海明码等检错纠错机制,简要介绍奇偶校验:

  • 奇校验:使编码中1的个数为奇数
  • 偶校验:使编码中1的个数为偶数
  • 仅能检测奇数位错误,不能纠正错误,也不能检测偶数位错误

三、记忆与理解辅助

3.1 口诀与技巧

  1. 进制转换口诀

    • 整数部分"除基取余,逆序排列"——从下往上读余数
    • 小数部分"乘基取整,顺序排列"——从上往下读整数
    • 记忆方式:整数"向下挖"(除法往下走,余数往上翻),小数"向上冒"(乘法往上走,整数往外拿)
  2. ASCII码速记

    • '0' = 48,'A' = 65,'a' = 97
    • 大写 + 32 = 小写(差值恒为32)
    • 记忆:"48起数字,65起大写,97起小写"
  3. BCD码加法修正口诀:"大于9或有进位,加6修正别忘记"

  4. 二进制 ↔ 八/十六进制速转

    • 三位合一 → 八进制(因为 23=82^3 = 8
    • 四合一 → 十六进制(因为 24=162^4 = 16

3.2 对比表:常用进制

特征二进制(Binary)八进制(Octal)十进制(Decimal)十六进制(Hex)
基数281016
数字0, 10–70–90–9, A–F
计算机中的用途内部运算简化二进制书写人类日常使用地址/数据表示
与二进制关系本身每3位二进制=1位需转换每4位二进制=1位

3.3 对比表:三种BCD码

编码0123456789类型自补性
8421码0000000100100011010001010110011110001001有权码
余3码0011010001010110011110001001101010111100无权码
2421码0000000100100011010010111100110111101111有权码

四、例题与精解

例题1(基础巩固)

命题意图:考查十进制到二进制的转换能力,特别是小数部分的精确转换。

题目:将十进制数 13.6251013.625_{10} 转换为二进制数。

审题分析

  • 已知:十进制数 13.62513.625
  • 求解:对应的二进制表示
  • 关键:整数部分和小数部分分别转换

解题思路

  • 整数部分(13):使用除基取余法
  • 小数部分(0.625):使用乘基取整法

完整步骤

第一步:整数部分(13)

13 ÷ 2商 = 6余 = 1
6 ÷ 2商 = 3余 = 0
3 ÷ 2商 = 1余 = 1
1 ÷ 2商 = 0余 = 1

从下往上:1310=(1101)213_{10} = (1101)_2

第二步:小数部分(0.625)

0.625×2=1.250.625 \times 2 = 1.25整数 = 1小数 = 0.25
0.25×2=0.50.25 \times 2 = 0.5整数 = 0小数 = 0.5
0.5×2=1.00.5 \times 2 = 1.0整数 = 1小数 = 0.0

从上往下:0.62510=(0.101)20.625_{10} = (0.101)_2

第三步:合并

13.62510=(1101.101)213.625_{10} = (1101.101)_2

验证1101.101=8+4+0+1+0.5+0+0.125=13.6251101.101 = 8+4+0+1+0.5+0+0.125 = 13.625

方法反思

  • 有限位二进制小数只能精确表示分母为2的幂次的十进制小数
  • 如果小数部分经过若干次乘法后无法归零,说明该小数无法用有限位二进制精确表示,需要截断或舍入

例题2(中等提升)

命题意图:考查BCD码的加法运算及修正规则,同时检验对8421码非法码的识别能力。

题目:用8421码表示 58+3758 + 37,写出完整的编码运算过程及修正结果。

审题分析

  • 已知:两个十进制数 58 和 37
  • 求解:用8421码完成加法,展示修正过程
  • 关键:按位相加后检查是否需要加6修正

解题思路

  1. 分别将58和37转换为8421码
  2. 按位相加
  3. 检查每一位是否出现非法码(1010–1111),若有则加6修正

完整步骤

第一步:编码

  • 501015 \to 0101810008 \to 1000,所以 588421=0101 100058_{8421} = 0101\ 1000
  • 300113 \to 0011701117 \to 0111,所以 378421=0011 011137_{8421} = 0011\ 0111

第二步:按位相加

低4位(个位):1000+0111=11111000 + 0111 = 1111(15,非法码!) 高4位(十位):0101+0011=10000101 + 0011 = 1000(8)

第三步:加6修正

低4位修正:1111+0110=101011111 + 0110 = 10101(产生进位)

  • 低4位结果为 01010101(5),进位1加到高4位

高4位修正:1000+1(进位)=10011000 + 1(\text{进位}) = 1001(9)

  • 检查:1001=91001 = 9,合法,无需再修正

最终结果(1001 0101)8421=9510(1001\ 0101)_{8421} = 95_{10} ✓(因为 58+37=9558 + 37 = 95

方法反思

  • 修正的核心思路:8421码中1010–1111是非法码,加6(0110)恰好将其"跳过"到合法的进位状态
  • 逐位检查是关键:先看低位是否需要修正,修正产生的进位再传到高位
  • 余3码的加法规则不同:两个余3码相加,若结果合法则减3修正

五、考情分析

分析维度具体情况
近5年考查频次选择题约2–3次,偶尔作为大题中的小问出现
常见题型选择题为主(进制转换、ASCII码值、BCD码识别)
分值占比选择题2分左右,偶尔在综合题中作为子问题出现(1–2分)
命题趋势单独出题概率较低,但作为其他知识点(补码、浮点数)的基础,常被隐含考查。近年趋势:与硬件设计结合,如给出存储内容要求反推编码方式

:考情数据基于大纲权重与通用命题规律推测,待真题分析子代理产出后校准。


六、易错点提醒

易错点1

  • 错误表现:将十进制小数转二进制时,误以为所有小数都能精确转换,不检查小数部分是否归零
  • 错误原因:受十进制思维影响,认为"小数总是可以精确表示的"
  • 正确做法:转换时严格按乘基取整法操作,若小数部分始终不为0则为无限循环二进制小数,需根据精度要求截断

易错点2

  • 错误表现:混淆国标码、区位码和机内码的转换关系,忘记加的是H进制还是十进制
  • 错误原因:三个编码之间的偏移量不同(区位码+20H得国标码,国标码+80H得机内码),容易记混顺序或偏移值
  • 正确做法:记住"区位码→国标码→机内码"的链条,偏移量分别是20H和80H。也可以直接记:机内码 = 区位码 + A0A0H

易错点3

  • 错误表现:BCD码加法运算时忘记修正,或将修正规则应用于不需要修正的情况
  • 错误原因:没有理解修正的本质——只有当结果出现非法码(1010–1111)或产生进位时才需要加6
  • 正确做法:加法完成后,逐位检查:若该位结果 ≤ 1001(9),则合法不需修正;若 ≥ 1010(10),则加0110(6)修正

易错点4

  • 错误表现:混淆字符'0'的ASCII码值(48)与数值0
  • 错误原因:将"数字字符"和"数值"概念混为一谈
  • 正确做法:字符'0'的编码是48,字符'5'的编码是53。若要从字符得到数值,需减去48(或减去'0')

七、来源标注

  • 依据2026考研统考大纲"计算机组成原理"第二章"数据的表示和运算"中"数制与编码"相关内容
  • 依据大学本科经典教材共识(唐朔飞《计算机组成原理》、白中英《计算机组成原理》)
  • BCD码编码规则参照GB/T标准

本知识单元为CO-02"数据的表示和运算"系列第1单元,下一单元将讲解定点数的编码表示。

考研全科复习资料 - 基于2026考研统考大纲