情境导入:望楼如何传信?
《长安十二时辰》里,长安城的望楼用窗格颜色的组合传递军情——这其实就是一套"二进制编码"。
唐玄宗在位期间,长安有难。城中设有望楼,武侯们通过窗格的颜色切换把情报一站站传到靖安司:每个窗格只有白、蓝两种状态,多个窗格组合起来,就能表示不同的含义。
动手试一试:拨动望楼窗格
点击窗格切换白 / 蓝,观察对应的二进制数与方位。(约定:00=东,01=南,10=西,11=北)
如果窗格更多,能表示多少种信息?
n 个窗格(n 位二进制)共有 2n 种不同组合,可以编码 2n 种信息。这正是"位数越多,能表示的内容越丰富"的原因。
原理:计算机为什么采用二进制?
答案藏在硬件里——计算机的物理基础是电路,而电路最可靠的状态只有两种。
回顾初中物理:一个开关只有断开与闭合两种状态;一盏灯只有灭与亮两种状态。把"断开 / 灭"记为 0,把"闭合 / 亮"记为 1,电路的两种物理状态就与二进制的两个数码一一对应了。
演示:两个开关控制一盏灯
点击开关切换状态,观察电路状态编码与灯泡的变化(本电路为串联:只有两个开关都闭合,灯才会亮)。
| 开关1 | 开关2 | 状态编码 | 灯泡 |
|---|---|---|---|
| 断开 | 断开 | 00 | 灭 |
| 断开 | 闭合 | 01 | 灭 |
| 闭合 | 断开 | 10 | 灭 |
| 闭合 | 闭合 | 11 | 亮 |
再进一步:3 个开关能编码 8 种状态
二进制并不神秘,生活中到处都是
硬币
正面 / 反面,抛硬币做选择就是一次"二进制决策"。
判断题
对 / 错,用 1 和 0 就能统计整张卷子的得分。
开关与灯
开 / 关、亮 / 灭,是所有数字设备的底层语言。
"一生二,二生三,三生万物"——人类发现了二进制的机制,再用它在计算机里表示万事万物。
核心概念:基数、数码与位权
所有进制转换的方法,都建立在"位权"这一个概念之上。
先看熟悉的十进制
推广到任意 R 进制
四种常用进制对照
| 进制 | 基数 R | 可用数码 | 第 i 位的权 | 书写标识 | 典型用途 |
|---|---|---|---|---|---|
| 二进制 | 2 | 0、1 | 2i | 下标 2 或 后缀 B | 计算机内部存储与运算 |
| 八进制 | 8 | 0 ~ 7 | 8i | 下标 8 或 后缀 O | 早期系统、文件权限(Linux) |
| 十进制 | 10 | 0 ~ 9 | 10i | 下标 10 或 后缀 D | 人类日常计数 |
| 十六进制 | 16 | 0~9、A~F | 16i | 下标 16、后缀 H 或 前缀 0x | 内存地址、颜色值、机器码 |
十六进制的"字母数码"
| 十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| 二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
注意:十六进制中 A~F 分别代表十进制的 10~15,这是为了"一位表示 0~15"而借用字母。
进制互转:两套方法,通吃所有进制
R 进制 → 十进制用「按权展开求和」;十进制 → R 进制用「除 R 取余、倒序排列」。
① R 进制 → 十进制:按权展开求和法
输入一个二进制 / 八进制 / 十六进制数,页面会把它逐位拆开,算出每一位的"权"与"数值",再求和。
② 十进制 → R 进制:除 R 取余,倒序排列
把十进制数反复除以 R 取余数,直到商为 0,然后把余数从下往上倒着读——最后一步的余数是最高位。
除法竖式(自上而下)
倒序读余数
快捷技巧:8421 法与分组法
掌握原理之后,用技巧可以做到"一眼看出答案"。
① "8421"法(凑数法)—— 二进制 → 十进制 / 十六进制
4 位二进制从高位到低位的权依次是 8、4、2、1。哪一位是 1,就把对应的权加起来;是 0 就跳过。
② 二进制 ↔ 八进制:"三缩一,一放三"
因为 23=8,所以每 3 位二进制恰好对应1 位八进制:二进制转八进制是"三位缩成一位",反过来是"一位放成三位"。
③ 二进制 ↔ 十六进制:"四缩一,一放四"
万能进制转换器
任意输入一种进制的整数,其余三种进制实时呈现(本节只讨论整数转换)。
延伸:进制转换的真实应用 —— 编码
计算机里的一切都要先变成 0/1。这个"变成 0/1 的约定"就是编码。下面这些应用,本质上都是进制转换。
7.1 二维码:把文字变成 0/1 方阵
二维码(QR Code)就是把一串字符,按规则编码成由黑(1)白(0)小方块组成的矩阵。扫码时,手机读取明暗,还原成 0/1,再解码出原文。
编码流程
内容的前 8 个字节
模块矩阵(前 14 行,■=1 黑,·=0 白)
7.2 网页颜色 #RRGGBB:两位十六进制表示一个通道
网页中的颜色用 6 位十六进制表示,如 #FF8800。每两位控制一个通道:红(R)、绿(G)、蓝(B),每通道取值 00~FF,即十进制 0~255。
7.3 字符编码:文字也是数字
计算机不认识"字",只认识"数"。于是人们约定:给每个字符编一个号(码点),存的时候存这个号——这就是字符编码。ASCII 用 1 个字节(0~127),汉字等多国文字用 Unicode / UTF-8。
7.4 IP 地址与子网掩码:点分十进制其实是二进制
IPv4 地址是 32 位二进制数,为了好记,每 8 位一组转成十进制,写成"点分十进制"。
在线自测
随机生成 8 道题,输入答案后即时判定。可反复"换一批"练习。
课堂小结
| 转换方向 | 方法 | 口诀 |
|---|---|---|
| R 进制 → 十进制 | 按权展开求和:各位数字 × 基数位序 再相加 | 按权展开求和法 |
| 十进制 → R 进制 | 反复除以 R 取余,直到商为 0 | 除基取余,倒序排列 |
| 二进制 ↔ 八进制 | 从右往左每 3 位一组,每组换成 1 位八进制 | 三缩一,一放三 |
| 二进制 ↔ 十六进制 | 从右往左每 4 位一组,每组换成 1 位十六进制 | 四缩一,一放四 |
| 二进制 → 十进制(快算) | 四位一组,权重 8 4 2 1,是 1 就加起来 | 8421 凑数法 |