第 136 篇
考研数电·零基础讲义 第01讲(上)|数制与进制转换
考研数电·零基础讲义 · 第 01 讲(上)|数制与进制转换 学完本讲,你能看懂二进制、八进制、十六进制,能在它们和十进制之间来回转换(包括带小数的数)。预计用时:1.5–2 小时(含练习)。
本讲地图
- 学什么:什么叫"数制";十进制、二进制、八进制、十六进制各自长什么样;"位权展开"这把万能钥匙;四种进制之间的互相转换(整数和小数都要会)。
- 为什么先学它:数字电路里所有东西最后都变成 0 和 1。后面的编码、逻辑代数、计数器、D/A 转换,全都建立在"会读二进制"之上。
- 华师怎么考:考纲第一条就是"数制和码制"。它很少单独出大题,但会藏在别的题里:比如 D/A 题要你把一个 10 位二进制数换成十进制再算电压,计数器题要你把"模 28"写成二进制去接反馈线。转换算错一步,后面全错。
- 教材对应:阎石《数字电子技术基础》第六版 第 1 章 1.2 节(几种常用的数制)、1.3 节(不同数制间的转换)。
前置知识
- 只需要小学的乘除法和"个位、十位、百位"的概念。
- 不需要任何电路知识。这是整个系列的第一块砖(导读见第 00 讲)。
一、为什么数字电路偏偏用二进制?
大白话
想象你家里有一盏灯,它只有两种状态:亮或灭。你没办法让一盏普通的开关灯"亮到 37%"。数字电路里的基本元件也是这样——一个晶体管要么"导通"(像开关合上),要么"截止"(像开关断开);一根导线上的电压要么是"高电平",要么是"低电平"。
既然每个元件天生只有两种状态,那最省事的办法就是只用两个数码:1 和 0。用 1 代表"高/通/亮",用 0 代表"低/断/灭"。这就是二进制。
如果非要用十进制,就得让一根线能稳定地分出 10 种电压,还要不怕干扰——这非常难做,也很容易出错。而"两种状态"只要分得清"高"和"低"就行,抗干扰能力强得多。
一句话:元件只有两种状态 → 用两个数码最自然 → 二进制。
那为什么还要学八进制、十六进制?
二进制的缺点是"太长"。比如十进制的 1000,写成二进制是 1111101000,十位数字,人眼一看就晕。八进制和十六进制可以把二进制"压缩"着写(3 位二进制 = 1 位八进制,4 位二进制 = 1 位十六进制),方便人读写。它们本质上只是二进制的"简写"。
二、数制的通用规律:位权展开
大白话
我们从小用十进制,早就习惯了"逢十进一"。数一个数 143.75,你脑子里其实在做这件事:
- 1 在百位,代表 1 个 100;
- 4 在十位,代表 4 个 10;
- 3 在个位,代表 3 个 1;
- 7 在十分位,代表 7 个 0.1;
- 5 在百分位,代表 5 个 0.01。
同一个数码,放在不同位置,代表的大小不一样。 每个位置"一个单位值多少",就叫这一位的权。
正式定义
多位数码中,每一位怎么构成、低位向高位怎么进位,这套规则叫做数制(也叫进位计数制)。
任何一个进制数都可以按下面的式子展开成十进制:
逐行拆解
- :读作"基数",就是"逢几进一"的那个几。十进制,二进制,八进制,十六进制。
- :第位上的数码(也叫系数),它只能取到。比如二进制每位只能是 0 或 1,八进制只能是 0–7。
- :第位的权。
- 的编号规则:小数点左边第一位(个位)是,往左依次;小数点右边第一位是,往右依次。
- :读作"求和",意思是把每一位的"数码 × 权"全部加起来。
拿 143.75 验证一下:
算出来确实是。
怎么标明"这是几进制"
同样写 "101",在十进制里是一百零一,在二进制里却是五。所以必须标注进制,常见两种写法:
| 写法 | 二进制 | 八进制 | 十进制 | 十六进制 |
|---|---|---|---|---|
| 下标数字 | ||||
| 字母后缀 | 101B | 17O(或 17Q) | 25D | 2AH |
B = Binary(二进制),O = Octal(八进制),D = Decimal(十进制),H = Hexadecimal(十六进制)。考试里两种都可能出现,要都认识。
三、二进制、八进制、十六进制长什么样
1. 二进制(基数 2)
- 数码只有 0 和 1,"逢二进一"。
- 各位的权:
计数时这样走:0, 1, 10, 11, 100, 101, 110, 111, 1000……注意 1 + 1 不是 2,而是"本位写 0、向前进 1",所以。
建议把到背下来,后面天天用:
| 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
小数这边也记几个:,,,。
2. 八进制(基数 8)
- 数码 0–7,"逢八进一"。没有 8 和 9!看到八进制数里出现 8、9,一定是写错了。
- 各位的权:……
3. 十六进制(基数 16)
- 需要 16 个数码,但阿拉伯数字只有 10 个,于是借用字母:
| 十六进制数码 | 0–9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|
| 代表的值 | 0–9 | 10 | 11 | 12 | 13 | 14 | 15 |
- "逢十六进一":F 再加 1 就变成 10(读作"一零",值是 16)。
- 各位的权:……
4. 0–15 对照表(务必熟记)
| 十进制 | 二进制 | 八进制 | 十六进制 | 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|---|---|---|---|
| 0 | 0000 | 0 | 0 | 8 | 1000 | 10 | 8 |
| 1 | 0001 | 1 | 1 | 9 | 1001 | 11 | 9 |
| 2 | 0010 | 2 | 2 | 10 | 1010 | 12 | A |
| 3 | 0011 | 3 | 3 | 11 | 1011 | 13 | B |
| 4 | 0100 | 4 | 4 | 12 | 1100 | 14 | C |
| 5 | 0101 | 5 | 5 | 13 | 1101 | 15 | D |
| 6 | 0110 | 6 | 6 | 14 | 1110 | 16 | E |
| 7 | 0111 | 7 | 7 | 15 | 1111 | 17 | F |
这张表是后面"分组法"的基础。熟到看见 1011 就脱口而出"B,十一",转换速度会快很多。
四、任意进制 → 十进制:按权展开相加
大白话
这是最简单的方向:每一位的"数码 × 权"加起来就行。就像数钱:几张 100、几张 10、几个 1 块,各自乘起来再相加。
图 1:二进制数 1011.01 按权展开。蓝色格子是 1,只有 1 的位才"贡献"它的权值。
例题 1(二进制 → 十进制)
把化成十进制。
第 1 步:标出每一位的权。 小数点左边从右往左:;小数点右边从左往右:。
第 2 步:数码乘权。
第 3 步:算出来相加。
小技巧:二进制数码只有 0 和 1,所以只把为 1 的那些位的权加起来就行,0 的位直接跳过。
例题 2(八进制、十六进制 → 十进制)
(1)
(2) 。先把字母换成数值:A = 10。
(3) 。
易错点 ⚠️
- 权的编号从 0 开始:个位是,不是。最常见的错误就是把整个数"多乘了一个"。
- 小数部分的权是负次幂:小数点右边第一位是,即。二进制就是 0.5,八进制是 0.125,十六进制是 0.0625。
- 十六进制里的字母要先换成 10–15 再算,别把 "A" 当成 1。
五、十进制整数 → 二进制:除 2 取余,倒着读
大白话
想象你有 45 颗糖,要两两打包:
- 45 颗两两一包,装 22 包,剩 1 颗——这颗散糖就是二进制最低位("1 的位");
- 22 包再两包一捆,装 11 捆,剩 0 包——这就是"2 的位";
- 11 捆再两两打成大捆……
每次"除以 2 剩下的余数",正好就是二进制从低到高的每一位。
方法
- 用十进制整数除以 2,记下商和余数;
- 再用商除以 2,再记余数;
- 一直除到商为 0 为止;
- 把所有余数从下往上(从最后一个到第一个)排起来,就是二进制数。
为什么倒着读?因为第一次除得到的余数是最低位,最后一次得到的是最高位。而写数字时高位在左,所以要从最后一个余数开始写。
图 2:45 除 2 取余,每一行出现一个余数,最后从下往上读(动画循环播放)。
例题 3
把和化成二进制。
(1) 45(过程见图 2)
| 被除数 | ÷2 的商 | 余数 | 对应位 |
|---|---|---|---|
| 45 | 22 | 1 | |
| 22 | 11 | 0 | |
| 11 | 5 | 1 | |
| 5 | 2 | 1 | |
| 2 | 1 | 0 | |
| 1 | 0 | 1 |
从下往上读:。
验算: ✓。养成习惯:转完马上按权展开回去核对一遍,花 10 秒,能救一整道题。
(2) 156
| 被除数 | 商 | 余数 |
|---|---|---|
| 156 | 78 | 0 |
| 78 | 39 | 0 |
| 39 | 19 | 1 |
| 19 | 9 | 1 |
| 9 | 4 | 1 |
| 4 | 2 | 0 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
从下往上读:。验算: ✓。
另一种快速方法:凑 2 的幂(适合小数字心算)
从不超过它的最大的 2 的幂开始减:,,,。用到了 128、16、8、4,对应,这些位写 1,其余写 0:。结果一样。
易错点 ⚠️
- 余数顺序读反:先得到的余数是最低位!写反了,101101 就成了 101101(这个恰好对称,你换成 156 试试就知道多危险:00111001 ≠ 10011100)。
- 除到商为 0 才停:不要在商为 1 时就停下,那个最后的"1 ÷ 2 = 0 余 1"的 1 是最高位,丢了就少一位。
六、十进制小数 → 二进制:乘 2 取整,顺着读
大白话
整数部分是"除"出来的,小数部分刚好反过来,是"乘"出来的。把小数乘以 2,相当于小数点往右挪一位——挪过来跨过小数点的那一位(整数部分),就是二进制小数的下一位。
方法
- 把十进制小数乘以 2,取出乘积的整数部分(0 或 1),记下来;
- 把乘积的小数部分继续乘以 2,再取整数部分;
- 重复,直到小数部分为 0,或达到题目要求的位数;
- 把取出的整数从上往下(按先后顺序)排在小数点后面。
注意方向:整数部分"倒着读",小数部分"顺着读"。因为第一次乘 2 得到的是紧挨小数点的。
例题 4
把化成二进制。
| 步骤 | 计算 | 整数部分 | 对应位 |
|---|---|---|---|
| 1 | 1 | ||
| 2 | 0 | ||
| 3 | 1 | ||
| 4 | 1 |
小数部分变成 0,停止。顺着读:。
验算: ✓。
(注意第 2 步:取走整数 1 之后,剩下再乘 2,不要把 1.375 整个乘 2。)
例题 5:乘不尽怎么办?
把化成二进制,保留 8 位小数。
| 步骤 | 计算 | 整数部分 |
|---|---|---|
| 1 | 0 | |
| 2 | 0 | |
| 3 | 0 | |
| 4 | 1 | |
| 5 | 1 | |
| 6 | 0 | |
| 7 | 0 | |
| 8 | 1 |
你会发现从第 2 步起 0.2 → 0.4 → 0.8 → 0.6 → 0.2 无限循环,永远乘不到 0。所以 0.1 在二进制里是无限循环小数,只能按要求截取:
误差约为 0.0023。这就是为什么题目会说"保留 n 位"或"误差不大于"——很多十进制小数在二进制里写不完,位数越多越精确。这个思想后面在 D/A、A/D 转换里会再次出现:位数越多,能表示的最小变化量越小(见第 24 讲)。
例题 6:整数和小数一起
把化成二进制。
整数和小数分开转,最后用小数点拼起来。
- 整数 25:除 2 取余,余数依次为 1, 0, 0, 1, 1,倒读得;
- 小数 0.375:取 0;取 1;取 1,顺读得。
所以。
验算: ✓。
易错点 ⚠️
- 整数部分倒读,小数部分顺读,最容易混。记口诀:"除二取余倒着排,乘二取整顺着来"。
- 带整数和小数的数必须拆开转,不能把 25.375 整个去"除以 2"。
- 乘 2 之后要扔掉整数部分再继续乘,否则数字越乘越大。
七、二进制 ↔ 八进制、十六进制:分组法
大白话
,所以3 位二进制正好凑成 1 位八进制;,所以4 位二进制正好凑成 1 位十六进制。就像把一串散装的鸡蛋,3 个一盒或 4 个一盒地装起来,每盒贴一个标签(0–7 或 0–F)。
方法:二进制 → 十六进制(八进制同理,只是 3 位一组)
- 以小数点为界:整数部分从小数点向左每 4 位一组;小数部分从小数点向右每 4 位一组;
- 不够 4 位的组补 0:整数部分补在最左边(高位),小数部分补在最右边(低位);
- 每组按对照表换成一位十六进制数码。
图 3:同一个二进制数分别按 4 位、3 位分组。橙色的 0 是补上去的。
例题 7
把化成十六进制和八进制。
化十六进制:
- 整数部分 1101101,从右往左 4 位一组:1101 | 110,左边那组只有 3 位,左边补一个 0 → 0110 | 1101 → 6 D;
- 小数部分 10111,从左往右 4 位一组:1011 | 1,右边那组只有 1 位,右边补三个 0 → 1011 | 1000 → B 8。
所以。
化八进制:
- 整数部分 1101101,从右往左 3 位一组:101 | 101 | 1 → 补成 001 | 101 | 101 → 1 5 5;
- 小数部分 10111,从左往右 3 位一组:101 | 11 → 补成 101 | 110 → 5 6。
所以。
交叉验算:三者都应等于同一个十进制数。
两者一致 ✓。
反方向:十六进制(八进制)→ 二进制
每一位十六进制数码换成 4 位二进制(八进制换 3 位),按原顺序拼起来,最后去掉最左边和最右边多余的 0。
例题 8
化为二进制:
| 十六进制位 | 7 | A | 3 | . | C |
|---|---|---|---|---|---|
| 4 位二进制 | 0111 | 1010 | 0011 | . | 1100 |
拼起来是,去掉首尾无用的 0:。
易错点 ⚠️
- 分组方向:整数部分从小数点往左数,小数部分从小数点往右数。千万别从最左边开始 4 位一组地切整数部分。
- 补 0 的位置:整数补左边、小数补右边。小数补在左边会改变数值(和显然不一样)。
- 反向转换时,中间的每一组都必须写满 4 位(或 3 位)。比如 3 要写成 0011,不能写成 11,否则后面的位全错位。
八、八进制 ↔ 十六进制,十进制 → 十六进制
八进制 ↔ 十六进制:借道二进制
八进制和十六进制之间没有整齐的位数对应(3 和 4 不成倍数),最稳的办法是先转二进制,再重新分组。
例题 9
把化为十六进制。
- 八 → 二:3 → 011,6 → 110,5 → 101,得,即;
- 二 → 十六:4 位一组 1111 | 0101 → F 5。
所以。验算:, ✓。
十进制 → 十六进制:两种方法
方法一:除 16 取余,倒着读(和除 2 取余完全一个道理,只是每次除以 16,余数在 0–15 之间,10–15 要写成 A–F)。
方法二:先转二进制,再 4 位一组。
例题 10
把化为十六进制。
方法一:
| 被除数 | ÷16 的商 | 余数 |
|---|---|---|
| 300 | 18 | 12 → C |
| 18 | 1 | 2 |
| 1 | 0 | 1 |
倒读:。
方法二:,即;4 位一组(从右往左):1 | 0010 | 1100 → 0001 | 0010 | 1100 → 1 2 C。两种方法结果一致 ✓。
十进制转八进制同理:除 8 取余,或先转二进制再 3 位一组。
九、n 位二进制能表示多大的数?
大白话
1 位二进制能表示 0、1,两种;2 位能表示 00、01、10、11,四种;每多 1 位,种类翻一倍。
结论
- 位二进制数一共有种组合,能表示的无符号整数范围是。
- 例如 4 位:;8 位:;10 位:。
- 反过来,要表示的所有整数,需要的位数满足。比如要表示 0–999,因为,,所以至少要 10 位。
这个"位数 ↔ 范围"的关系在后面非常常用:
- 计数器有几个状态,需要几个触发器(第 16 讲);
- 存储器有多少个单元,需要几根地址线(第 22 讲);
- D/A 转换器位,就把满量程分成份(第 24 讲,2026 回忆题第 9 题就考了 10 位 D/A 的分辨率)。
易错点 ⚠️
- 位能表示个数,但最大值是(因为从 0 开始数)。"个数"和"最大值"差 1,别混。
速记卡
| 项目 | 要点 |
|---|---|
| 位权展开 | ;个位是,小数第一位是 |
| 任意 → 十 | 每位"数码 × 权"相加;二进制只加为 1 的位 |
| 十 → 二(整数) | 除 2 取余,倒着读,除到商为 0 |
| 十 → 二(小数) | 乘 2 取整,顺着读,乘到 0 或够位数 |
| 混合数 | 整数、小数分开转再拼 |
| 二 ↔ 十六 | 以小数点为界 4 位一组;整数补左、小数补右 |
| 二 ↔ 八 | 以小数点为界 3 位一组 |
| 八 ↔ 十六 | 先转二进制再重新分组 |
| 十 → 十六 | 除 16 取余倒读,或先转二进制 |
| 范围 | 位二进制:种,最大 |
| 必背 | :1,2,4,8,16,32,64,128,256,512,1024;0–15 四种进制对照表 |
| 口诀 | 除二取余倒着排,乘二取整顺着来 |
自测练习
1. 把化为十进制。
答案与提示
只加为 1 的位:,即。
2. 把化为二进制。
答案与提示
除 2 取余:100→50 余 0,50→25 余 0,25→12 余 1,12→6 余 0,6→3 余 0,3→1 余 1,1→0 余 1。倒读得。
验算: ✓。
3. 把化为二进制。
答案与提示
取 0;取 1;取 1。顺读得。
验算: ✓。
4. 把分别化为十六进制和八进制。
答案与提示
- 十六进制:整数 1011 | 1011 → BB;小数 101 → 补成 1010 → A。得。
- 八进制:整数从右往左 3 位一组 011 | 101 | 10 → 补成 010 | 111 | 011 → 2 7 3;小数 101 → 5。得。
交叉验算:都等于。
5. 把化为二进制和十进制。
答案与提示
- 二进制:4 → 0100,D → 1101,6 → 0110,得,去掉首尾 0:。
- 十进制:。
6. 把化为十六进制。
答案与提示
先化二进制:5 → 101,7 → 111,得;再 4 位一组:0010 | 1111 → 。
验算:, ✓。
7. 把化为二进制,保留 6 位小数(直接截断),并算出截断后的值和误差。
答案与提示
取 0;取 1;取 0;取 0;取 1;取 1。得。
它的值是,误差,小于。
8.(华师风格)某 D/A 转换器输入为 10 位二进制数。(1) 它能接收的最大数字量是多少(写成二进制、十六进制和十进制)?(2) 若要让输入能区分 0–999 共 1000 个不同的十进制数,最少需要几位二进制?10 位够不够?
答案与提示
(1) 10 位全 1:。4 位一组:11 | 1111 | 1111 → ;十进制。
(2) 需要。不够,够,所以最少 10 位,10 位够用。
(D/A 的分辨率、输出电压怎么算,见第 24 讲。)
下一讲预告
第 01 讲(下):二进制里的负数怎么表示?原码、反码、补码,为什么计算机用"加补码"代替减法;以及 BCD 码、格雷码、奇偶校验码、ASCII 码这些常用编码。
👉 点击进入下一讲:第01讲(下)|二进制运算与常用编码
评论
还没有评论。 来写第一条。