第 136 篇

考研数电·零基础讲义 第01讲(上)|数制与进制转换

约 18 分钟 5837 字 华南师范大学数字电子技术考研数电零基础讲义

考研数电·零基础讲义 · 第 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。

同一个数码,放在不同位置,代表的大小不一样。 每个位置"一个单位值多少",就叫这一位的权。

正式定义

多位数码中,每一位怎么构成、低位向高位怎么进位,这套规则叫做数制(也叫进位计数制)。

任何一个NN进制数都可以按下面的式子展开成十进制:

D=∑ikiNiD=\sum_i k_i N^i

逐行拆解

  • NN⁠:读作"基数",就是"逢几进一"的那个几。十进制N=10N=10⁠,二进制N=2N=2⁠,八进制N=8N=8⁠,十六进制N=16N=16⁠。
  • kik_i⁠:第ii位上的数码(也叫系数),它只能取00到N−1N-1⁠。比如二进制每位只能是 0 或 1,八进制只能是 0–7。
  • NiN^i⁠:第ii位的权。
  • ii的编号规则:小数点左边第一位(个位)是i=0i=0⁠,往左依次1,2,3,…1,2,3,\dots⁠;小数点右边第一位是i=−1i=-1⁠,往右依次−2,−3,…-2,-3,\dots⁠。
  • ∑\sum⁠:读作"求和",意思是把每一位的"数码 × 权"全部加起来。

拿 143.75 验证一下:

143.75=1×102+4×101+3×100+7×10−1+5×10−2143.75=1\times10^2+4\times10^1+3\times10^0+7\times10^{-1}+5\times10^{-2}

算出来确实是100+40+3+0.7+0.05=143.75100+40+3+0.7+0.05=143.75⁠。

怎么标明"这是几进制"

同样写 "101",在十进制里是一百零一,在二进制里却是五。所以必须标注进制,常见两种写法:

写法 二进制 八进制 十进制 十六进制
下标数字 (101)2(101)_2 (17)8(17)_8 (25)10(25)_{10} (2A)16(2A)_{16}
字母后缀 101B 17O(或 17Q) 25D 2AH

B = Binary(二进制),O = Octal(八进制),D = Decimal(十进制),H = Hexadecimal(十六进制)。考试里两种都可能出现,要都认识。


三、二进制、八进制、十六进制长什么样

1. 二进制(基数 2)

  • 数码只有 0 和 1,"逢二进一"。
  • 各位的权:…, 23=8, 22=4, 21=2, 20=1, . 2−1=0.5, 2−2=0.25, 2−3=0.125,…\dots,\ 2^3=8,\ 2^2=4,\ 2^1=2,\ 2^0=1,\ .\ 2^{-1}=0.5,\ 2^{-2}=0.25,\ 2^{-3}=0.125,\dots

计数时这样走:0, 1, 10, 11, 100, 101, 110, 111, 1000……注意 1 + 1 不是 2,而是"本位写 0、向前进 1",所以1+1=(10)21+1=(10)_2⁠。

建议把202^0到2102^{10}背下来,后面天天用:

202^0 212^1 222^2 232^3 242^4 252^5 262^6 272^7 282^8 292^9 2102^{10}
1 2 4 8 16 32 64 128 256 512 1024

小数这边也记几个:2−1=0.52^{-1}=0.5⁠,2−2=0.252^{-2}=0.25⁠,2−3=0.1252^{-3}=0.125⁠,2−4=0.06252^{-4}=0.0625⁠。

2. 八进制(基数 8)

  • 数码 0–7,"逢八进一"。没有 8 和 9!看到八进制数里出现 8、9,一定是写错了。
  • 各位的权:82=64, 81=8, 80=1, 8−1=0.1258^2=64,\ 8^1=8,\ 8^0=1,\ 8^{-1}=0.125⁠……

3. 十六进制(基数 16)

  • 需要 16 个数码,但阿拉伯数字只有 10 个,于是借用字母:
十六进制数码 0–9 A B C D E F
代表的值 0–9 10 11 12 13 14 15
  • "逢十六进一":F 再加 1 就变成 10(读作"一零",值是 16)。
  • 各位的权:162=256, 161=16, 160=1, 16−1=0.062516^2=256,\ 16^1=16,\ 16^0=1,\ 16^{-1}=0.0625⁠……

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 块,各自乘起来再相加。

二进制数 1011.01 按权展开:各位权值 8、4、2、1、0.5、0.25,有1的位相加得 11.25 位权 权值 数码 贡献 23 8 1 1×8 22 4 0 0×4 21 2 1 1×2 20 1 1 1×1 . 2−1 0.5 0 0×0.5 2−2 0.25 1 1×0.25 8 + 0 + 2 + 1 + 0 + 0.25 = 11.25(十进制)

图 1:二进制数 1011.01 按权展开。蓝色格子是 1,只有 1 的位才"贡献"它的权值。

例题 1(二进制 → 十进制)

把(1011.01)2(1011.01)_2化成十进制。

第 1 步:标出每一位的权。 小数点左边从右往左:20,21,22,232^0,2^1,2^2,2^3⁠;小数点右边从左往右:2−1,2−22^{-1},2^{-2}⁠。

第 2 步:数码乘权。

(1011.01)2=1×23+0×22+1×21+1×20+0×2−1+1×2−2(1011.01)_2=1\times2^3+0\times2^2+1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}

第 3 步:算出来相加。

=8+0+2+1+0+0.25=(11.25)10=8+0+2+1+0+0.25=(11.25)_{10}

小技巧:二进制数码只有 0 和 1,所以只把为 1 的那些位的权加起来就行,0 的位直接跳过。

例题 2(八进制、十六进制 → 十进制)

(1) (237)8(237)_8

(237)8=2×82+3×81+7×80=128+24+7=(159)10(237)_8=2\times8^2+3\times8^1+7\times8^0=128+24+7=(159)_{10}

(2) (2A.8)16(2A.8)_{16}⁠。先把字母换成数值:A = 10。

(2A.8)16=2×161+10×160+8×16−1=32+10+0.5=(42.5)10(2A.8)_{16}=2\times16^1+10\times16^0+8\times16^{-1}=32+10+0.5=(42.5)_{10}

(3) (3F)16=3×16+15=(63)10(3F)_{16}=3\times16+15=(63)_{10}⁠。

易错点 ⚠️

  • 权的编号从 0 开始:个位是N0=1N^0=1⁠,不是N1N^1⁠。最常见的错误就是把整个数"多乘了一个NN"。
  • 小数部分的权是负次幂:小数点右边第一位是N−1N^{-1}⁠,即1N\dfrac1N⁠。二进制就是 0.5,八进制是 0.125,十六进制是 0.0625。
  • 十六进制里的字母要先换成 10–15 再算,别把 "A" 当成 1。

五、十进制整数 → 二进制:除 2 取余,倒着读

大白话

想象你有 45 颗糖,要两两打包:

  • 45 颗两两一包,装 22 包,剩 1 颗——这颗散糖就是二进制最低位("1 的位");
  • 22 包再两包一捆,装 11 捆,剩 0 包——这就是"2 的位";
  • 11 捆再两两打成大捆……

每次"除以 2 剩下的余数",正好就是二进制从低到高的每一位。

方法

  1. 用十进制整数除以 2,记下商和余数;
  2. 再用商除以 2,再记余数;
  3. 一直除到商为 0 为止;
  4. 把所有余数从下往上(从最后一个到第一个)排起来,就是二进制数。

为什么倒着读?因为第一次除得到的余数是最低位k0k_0⁠,最后一次得到的是最高位。而写数字时高位在左,所以要从最后一个余数开始写。

十进制 45 转二进制:反复除以2记余数,余数从下往上读得 101101(动画逐步出现) 被除数 ÷ 2 商 余数 是第几位 45 ÷ 2 = 22 1 k0(权 1) 22 ÷ 2 = 11 0 k1(权 2) 11 ÷ 2 = 5 1 k2(权 4) 5 ÷ 2 = 2 1 k3(权 8) 2 ÷ 2 = 1 0 k4(权 16) 1 ÷ 2 = 0 1 k5(权 32) 从下往上读 十进制 45 = 二进制 101101

图 2:45 除 2 取余,每一行出现一个余数,最后从下往上读(动画循环播放)。

例题 3

把(45)10(45)_{10}和(156)10(156)_{10}化成二进制。

(1) 45(过程见图 2)

被除数 ÷2 的商 余数 对应位
45 22 1 k0k_0
22 11 0 k1k_1
11 5 1 k2k_2
5 2 1 k3k_3
2 1 0 k4k_4
1 0 1 k5k_5

从下往上读:(45)10=(101101)2(45)_{10}=(101101)_2⁠。

验算:32+8+4+1=4532+8+4+1=45 ✓。养成习惯:转完马上按权展开回去核对一遍,花 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

从下往上读:(156)10=(10011100)2(156)_{10}=(10011100)_2⁠。验算:128+16+8+4=156128+16+8+4=156 ✓。

另一种快速方法:凑 2 的幂(适合小数字心算)

从不超过它的最大的 2 的幂开始减:156−128=28156-128=28⁠,28−16=1228-16=12⁠,12−8=412-8=4⁠,4−4=04-4=0⁠。用到了 128、16、8、4,对应27,24,23,222^7,2^4,2^3,2^2⁠,这些位写 1,其余写 0:1001110010011100⁠。结果一样。

易错点 ⚠️

  • 余数顺序读反:先得到的余数是最低位!写反了,101101 就成了 101101(这个恰好对称,你换成 156 试试就知道多危险:00111001 ≠ 10011100)。
  • 除到商为 0 才停:不要在商为 1 时就停下,那个最后的"1 ÷ 2 = 0 余 1"的 1 是最高位,丢了就少一位。

六、十进制小数 → 二进制:乘 2 取整,顺着读

大白话

整数部分是"除"出来的,小数部分刚好反过来,是"乘"出来的。把小数乘以 2,相当于小数点往右挪一位——挪过来跨过小数点的那一位(整数部分),就是二进制小数的下一位。

方法

  1. 把十进制小数乘以 2,取出乘积的整数部分(0 或 1),记下来;
  2. 把乘积的小数部分继续乘以 2,再取整数部分;
  3. 重复,直到小数部分为 0,或达到题目要求的位数;
  4. 把取出的整数从上往下(按先后顺序)排在小数点后面。

注意方向:整数部分"倒着读",小数部分"顺着读"。因为第一次乘 2 得到的是紧挨小数点的k−1k_{-1}⁠。

例题 4

把(0.6875)10(0.6875)_{10}化成二进制。

步骤 计算 整数部分 对应位
1 0.6875×2=1.3750.6875\times2=1.375 1 k−1k_{-1}
2 0.375×2=0.750.375\times2=0.75 0 k−2k_{-2}
3 0.75×2=1.50.75\times2=1.5 1 k−3k_{-3}
4 0.5×2=1.00.5\times2=1.0 1 k−4k_{-4}

小数部分变成 0,停止。顺着读:(0.6875)10=(0.1011)2(0.6875)_{10}=(0.1011)_2⁠。

验算:0.5+0.125+0.0625=0.68750.5+0.125+0.0625=0.6875 ✓。

(注意第 2 步:1.3751.375取走整数 1 之后,剩下0.3750.375再乘 2,不要把 1.375 整个乘 2。)

例题 5:乘不尽怎么办?

把(0.1)10(0.1)_{10}化成二进制,保留 8 位小数。

步骤 计算 整数部分
1 0.1×2=0.20.1\times2=0.2 0
2 0.2×2=0.40.2\times2=0.4 0
3 0.4×2=0.80.4\times2=0.8 0
4 0.8×2=1.60.8\times2=1.6 1
5 0.6×2=1.20.6\times2=1.2 1
6 0.2×2=0.40.2\times2=0.4 0
7 0.4×2=0.80.4\times2=0.8 0
8 0.8×2=1.60.8\times2=1.6 1

你会发现从第 2 步起 0.2 → 0.4 → 0.8 → 0.6 → 0.2 无限循环,永远乘不到 0。所以 0.1 在二进制里是无限循环小数,只能按要求截取:

(0.1)10≈(0.00011001)2=25256=0.09765625(0.1)_{10}\approx(0.00011001)_2=\frac{25}{256}=0.09765625

误差约为 0.0023。这就是为什么题目会说"保留 n 位"或"误差不大于2−n2^{-n}"——很多十进制小数在二进制里写不完,位数越多越精确。这个思想后面在 D/A、A/D 转换里会再次出现:位数越多,能表示的最小变化量越小(见第 24 讲)。

例题 6:整数和小数一起

把(25.375)10(25.375)_{10}化成二进制。

整数和小数分开转,最后用小数点拼起来。

  • 整数 25:除 2 取余,余数依次为 1, 0, 0, 1, 1,倒读得1100111001⁠;
  • 小数 0.375:0.375×2=0.750.375\times2=0.75取 0;0.75×2=1.50.75\times2=1.5取 1;0.5×2=1.00.5\times2=1.0取 1,顺读得.011.011⁠。

所以(25.375)10=(11001.011)2(25.375)_{10}=(11001.011)_2⁠。

验算:16+8+1+0.25+0.125=25.37516+8+1+0.25+0.125=25.375 ✓。

易错点 ⚠️

  • 整数部分倒读,小数部分顺读,最容易混。记口诀:"除二取余倒着排,乘二取整顺着来"。
  • 带整数和小数的数必须拆开转,不能把 25.375 整个去"除以 2"。
  • 乘 2 之后要扔掉整数部分再继续乘,否则数字越乘越大。

七、二进制 ↔ 八进制、十六进制:分组法

大白话

23=82^3=8⁠,所以3 位二进制正好凑成 1 位八进制;24=162^4=16⁠,所以4 位二进制正好凑成 1 位十六进制。就像把一串散装的鸡蛋,3 个一盒或 4 个一盒地装起来,每盒贴一个标签(0–7 或 0–F)。

方法:二进制 → 十六进制(八进制同理,只是 3 位一组)

  1. 以小数点为界:整数部分从小数点向左每 4 位一组;小数部分从小数点向右每 4 位一组;
  2. 不够 4 位的组补 0:整数部分补在最左边(高位),小数部分补在最右边(低位);
  3. 每组按对照表换成一位十六进制数码。
二进制 1101101.10111 以小数点为界分组:4位一组得十六进制 6D.B8,3位一组得八进制 155.56,不足处补0 4位一组→十六进制 0 1 1 0 6 1 1 0 1 D . 1 0 1 1 B 1 0 0 0 8 3位一组→八进制 0 0 1 1 1 0 1 5 1 0 1 5 . 1 0 1 5 1 1 0 6 规则:整数部分从小数点向左分组,小数部分从小数点向右分组 橙色 0 是补上去的:整数补在最左边,小数补在最右边

图 3:同一个二进制数分别按 4 位、3 位分组。橙色的 0 是补上去的。

例题 7

把(1101101.10111)2(1101101.10111)_2化成十六进制和八进制。

化十六进制:

  • 整数部分 1101101,从右往左 4 位一组:1101 | 110,左边那组只有 3 位,左边补一个 0 → 0110 | 1101 → 6 D;
  • 小数部分 10111,从左往右 4 位一组:1011 | 1,右边那组只有 1 位,右边补三个 0 → 1011 | 1000 → B 8。

所以(1101101.10111)2=(6D.B8)16(1101101.10111)_2=(6D.B8)_{16}⁠。

化八进制:

  • 整数部分 1101101,从右往左 3 位一组:101 | 101 | 1 → 补成 001 | 101 | 101 → 1 5 5;
  • 小数部分 10111,从左往右 3 位一组:101 | 11 → 补成 101 | 110 → 5 6。

所以(1101101.10111)2=(155.56)8(1101101.10111)_2=(155.56)_8⁠。

交叉验算:三者都应等于同一个十进制数。

(6D.B8)16=6×16+13+1116+8256=109.71875(6D.B8)_{16}=6\times16+13+\frac{11}{16}+\frac{8}{256}=109.71875 (155.56)8=64+40+5+58+664=109.71875(155.56)_8=64+40+5+\frac58+\frac6{64}=109.71875

两者一致 ✓。

反方向:十六进制(八进制)→ 二进制

每一位十六进制数码换成 4 位二进制(八进制换 3 位),按原顺序拼起来,最后去掉最左边和最右边多余的 0。

例题 8

(7A3.C)16(7A3.C)_{16}化为二进制:

十六进制位 7 A 3 . C
4 位二进制 0111 1010 0011 . 1100

拼起来是0111 1010 0011.11000111\,1010\,0011.1100⁠,去掉首尾无用的 0:(7A3.C)16=(11110100011.11)2(7A3.C)_{16}=(11110100011.11)_2⁠。

易错点 ⚠️

  • 分组方向:整数部分从小数点往左数,小数部分从小数点往右数。千万别从最左边开始 4 位一组地切整数部分。
  • 补 0 的位置:整数补左边、小数补右边。小数补在左边会改变数值(⁠0.10.1和0.00010.0001显然不一样)。
  • 反向转换时,中间的每一组都必须写满 4 位(或 3 位)。比如 3 要写成 0011,不能写成 11,否则后面的位全错位。

八、八进制 ↔ 十六进制,十进制 → 十六进制

八进制 ↔ 十六进制:借道二进制

八进制和十六进制之间没有整齐的位数对应(3 和 4 不成倍数),最稳的办法是先转二进制,再重新分组。

例题 9

把(365)8(365)_8化为十六进制。

  • 八 → 二:3 → 011,6 → 110,5 → 101,得011 110 101011\,110\,101⁠,即1111010111110101⁠;
  • 二 → 十六:4 位一组 1111 | 0101 → F 5。

所以(365)8=(F5)16(365)_8=(F5)_{16}⁠。验算:(365)8=3×64+6×8+5=245(365)_8=3\times64+6\times8+5=245⁠,(F5)16=15×16+5=245(F5)_{16}=15\times16+5=245 ✓。

十进制 → 十六进制:两种方法

方法一:除 16 取余,倒着读(和除 2 取余完全一个道理,只是每次除以 16,余数在 0–15 之间,10–15 要写成 A–F)。

方法二:先转二进制,再 4 位一组。

例题 10

把(300)10(300)_{10}化为十六进制。

方法一:

被除数 ÷16 的商 余数
300 18 12 → C
18 1 2
1 0 1

倒读:(300)10=(12C)16(300)_{10}=(12C)_{16}⁠。

方法二:300=256+32+8+4300=256+32+8+4⁠,即(100101100)2(100101100)_2⁠;4 位一组(从右往左):1 | 0010 | 1100 → 0001 | 0010 | 1100 → 1 2 C。两种方法结果一致 ✓。

十进制转八进制同理:除 8 取余,或先转二进制再 3 位一组。


九、n 位二进制能表示多大的数?

大白话

1 位二进制能表示 0、1,两种;2 位能表示 00、01、10、11,四种;每多 1 位,种类翻一倍。

结论

  • nn位二进制数一共有2n2^n种组合,能表示的无符号整数范围是0∼2n−10\sim2^n-1⁠。
  • 例如 4 位:0∼150\sim15⁠;8 位:0∼2550\sim255⁠;10 位:0∼10230\sim1023⁠。
  • 反过来,要表示0∼M0\sim M的所有整数,需要的位数nn满足2n−1≥M2^n-1\ge M⁠。比如要表示 0–999,因为29−1=511<9992^9-1=511<999⁠,210−1=1023≥9992^{10}-1=1023\ge999⁠,所以至少要 10 位。

这个"位数 ↔ 范围"的关系在后面非常常用:

  • 计数器有几个状态,需要几个触发器(第 16 讲);
  • 存储器有多少个单元,需要几根地址线(第 22 讲);
  • D/A 转换器nn位,就把满量程分成2n−12^n-1份(第 24 讲,2026 回忆题第 9 题就考了 10 位 D/A 的分辨率)。

易错点 ⚠️

  • nn位能表示2n2^n个数,但最大值是2n−12^n-1(因为从 0 开始数)。"个数"和"最大值"差 1,别混。

速记卡

项目 要点
位权展开 D=∑kiNiD=\sum k_iN^i⁠;个位是N0N^0⁠,小数第一位是N−1N^{-1}
任意 → 十 每位"数码 × 权"相加;二进制只加为 1 的位
十 → 二(整数) 除 2 取余,倒着读,除到商为 0
十 → 二(小数) 乘 2 取整,顺着读,乘到 0 或够位数
混合数 整数、小数分开转再拼
二 ↔ 十六 以小数点为界 4 位一组;整数补左、小数补右
二 ↔ 八 以小数点为界 3 位一组
八 ↔ 十六 先转二进制再重新分组
十 → 十六 除 16 取余倒读,或先转二进制
范围 nn位二进制:2n2^n种,最大2n−12^n-1
必背 20∼2102^0\sim2^{10}⁠:1,2,4,8,16,32,64,128,256,512,1024;0–15 四种进制对照表
口诀 除二取余倒着排,乘二取整顺着来

自测练习

1. 把(110101)2(110101)_2化为十进制。

答案与提示

只加为 1 的位:32+16+4+1=5332+16+4+1=53⁠,即(110101)2=(53)10(110101)_2=(53)_{10}⁠。

2. 把(100)10(100)_{10}化为二进制。

答案与提示

除 2 取余:100→50 余 0,50→25 余 0,25→12 余 1,12→6 余 0,6→3 余 0,3→1 余 1,1→0 余 1。倒读得(1100100)2(1100100)_2⁠。

验算:64+32+4=10064+32+4=100 ✓。

3. 把(0.375)10(0.375)_{10}化为二进制。

答案与提示

0.375×2=0.750.375\times2=0.75取 0;0.75×2=1.50.75\times2=1.5取 1;0.5×2=1.00.5\times2=1.0取 1。顺读得(0.011)2(0.011)_2⁠。

验算:0.25+0.125=0.3750.25+0.125=0.375 ✓。

4. 把(10111011.101)2(10111011.101)_2分别化为十六进制和八进制。

答案与提示
  • 十六进制:整数 1011 | 1011 → BB;小数 101 → 补成 1010 → A。得(BB.A)16(BB.A)_{16}⁠。
  • 八进制:整数从右往左 3 位一组 011 | 101 | 10 → 补成 010 | 111 | 011 → 2 7 3;小数 101 → 5。得(273.5)8(273.5)_8⁠。

交叉验算:都等于187.625187.625⁠。

5. 把(4D.6)16(4D.6)_{16}化为二进制和十进制。

答案与提示
  • 二进制:4 → 0100,D → 1101,6 → 0110,得0100 1101.01100100\,1101.0110⁠,去掉首尾 0:(1001101.011)2(1001101.011)_2⁠。
  • 十进制:4×16+13+616=64+13+0.375=(77.375)104\times16+13+\dfrac{6}{16}=64+13+0.375=(77.375)_{10}⁠。

6. 把(57)8(57)_8化为十六进制。

答案与提示

先化二进制:5 → 101,7 → 111,得101111101111⁠;再 4 位一组:0010 | 1111 → (2F)16(2F)_{16}⁠。

验算:(57)8=40+7=47(57)_8=40+7=47⁠,(2F)16=32+15=47(2F)_{16}=32+15=47 ✓。

7. 把(0.3)10(0.3)_{10}化为二进制,保留 6 位小数(直接截断),并算出截断后的值和误差。

答案与提示

0.3→0.60.3\to0.6取 0;0.6→1.20.6\to1.2取 1;0.2→0.40.2\to0.4取 0;0.4→0.80.4\to0.8取 0;0.8→1.60.8\to1.6取 1;0.6→1.20.6\to1.2取 1。得(0.010011)2(0.010011)_2⁠。

它的值是0.25+0.03125+0.015625=0.2968750.25+0.03125+0.015625=0.296875⁠,误差0.3−0.296875=0.0031250.3-0.296875=0.003125⁠,小于2−6≈0.01562^{-6}\approx0.0156⁠。

8.(华师风格)某 D/A 转换器输入为 10 位二进制数。(1) 它能接收的最大数字量是多少(写成二进制、十六进制和十进制)?(2) 若要让输入能区分 0–999 共 1000 个不同的十进制数,最少需要几位二进制?10 位够不够?

答案与提示

(1) 10 位全 1:(1111111111)2(1111111111)_2⁠。4 位一组:11 | 1111 | 1111 → (3FF)16(3FF)_{16}⁠;十进制210−1=10232^{10}-1=1023⁠。

(2) 需要2n−1≥9992^n-1\ge999⁠。29−1=5112^9-1=511不够,210−1=10232^{10}-1=1023够,所以最少 10 位,10 位够用。

(D/A 的分辨率、输出电压怎么算,见第 24 讲。)


下一讲预告

第 01 讲(下):二进制里的负数怎么表示?原码、反码、补码,为什么计算机用"加补码"代替减法;以及 BCD 码、格雷码、奇偶校验码、ASCII 码这些常用编码。

👉 点击进入下一讲:第01讲(下)|二进制运算与常用编码

评论

还没有评论。 来写第一条。

留下一条评论

选填,不会公开

纯文本,链接会自动识别。