COLUMN 给的对象是小学新生:把二进制讲成【两盏灯】,把 CPU 讲成【一屋子灯加一个听话的开关】。
本章正文讲完(2.1~2.6),这个 COLUMN 是教材插在章末的【如果是你,你会怎样讲呢?】栏目。
一、专栏要回答的问题
教材每章末尾都有一个【如果是你,你会怎样讲呢?】,这一章的对象是小学新生。 要讲清两件事:CPU 是什么、二进制是什么。 难点不在于知识本身,而在于必须把【位、字节、电压、寄存器】这些词全部换掉。
二、第一招:把二进制讲成灯
两盏灯,一共能表示 4 个数。灭灭是 0,灭亮是 1,亮灭是 2,亮亮是 3。 小朋友马上会追问:【那再多一盏呢?】——每多一盏,能表示的数就翻一倍。 3 盏 8 关、4 盏 16 关、8 盏 256 关。 讲到这里就够了:二进制的全部规则就是【看灯的亮灭】,比看电压是几伏容易得多。
三、第二招:把 CPU 讲成看灯的人
CPU 里面是一排排的灯(就是寄存器),外面还有一堆灯(内存)。 它自己不会想事情,只做三件事:看灯、改灯、按顺序来。 所谓程序,就是一张写着【第几步该动哪盏灯】的清单。 小朋友听完通常会说【那它不聪明啊】——这句话说明他听懂了。
四、第三招:让小朋友自己数一遍
讲一句就想让他动手:摆两盏灯,把 0 到 3 全摆出来。 自己摆过一遍,比听十遍都牢——这一条对大人一样成立。 教材把这个栏目放在每章末尾,用意也在这里:能讲给别人听,才算真懂了。
五、专栏带出的方法
检验自己懂没懂,最好的办法是讲给完全不懂的人听。 讲的过程中你会立刻发现哪里是【自己背的】、哪里是【真的通了】。 这也是本书设这个栏目的真正目的——它检查的不是听众,是讲的人。
六、动手 Demo:用两盏灯和一个小朋友讲二进制
COLUMN 要讲给的对象是小学新生。 教材用的办法很妙:把二进制讲成【开着的灯和关着的灯】。
for a, ba in (("灭", "0"), ("亮", "1")):
for b, bb in (("灭", "0"), ("亮", "1")):
print("%s %s -> %s%s -> %d" % (a, b, ba, bb, int(ba + bb, 2)))
for k in (2, 3, 4, 8):
print("%d 盏灯 -> %d 个数" % (k, 2 ** k))
实跑输出:
--------------------------------------------------------------------
用两盏灯和一个小朋友讲二进制
--------------------------------------------------------------------
COLUMN 里要讲给的对象是小学新生。教材用的办法很妙——
**把二进制讲成【开着的灯和关着的灯】。**
左边一盏 右边一盏 写成 0/1 表示的数
------------------------------------------------
灭 灭 00 0
灭 亮 01 1
亮 灭 10 2
亮 亮 11 3
小朋友马上会问:那再多一盏呢?
2 盏灯 -> 4 个数(0~3)
3 盏灯 -> 8 个数(0~7)
4 盏灯 -> 16 个数(0~15)
8 盏灯 -> 256 个数(0~255)
**每多一盏灯,能表示的数就翻一倍。这就是二进制的全部。**
接下来把话头引到 CPU 上:
内存里的一格 = 8 盏灯(1 字节)
寄存器里的一排 = 同样是一排灯
所谓程序 = 一串排好顺序的【亮灭】
给小朋友的比喻到这儿就够了:**CPU 不会数学,它只会看灯。**
但看灯的规则定得好,几盏灯拼起来就能算出你想不到的东西。
两盏灯能表示 4 个数;每多一盏灯,能表示的数就翻一倍。 用【看灯的亮灭】代替 0 和 1,用【一屋子灯】代替 CPU——术语一撤,道理就露出来了。
30 秒实验
- 找一个人(家人、同事都行),用【灯】的比方把二进制讲给他听,讲讲看他会不会追问。
- 把 CPU 讲成【会看灯的按单办事的机器】,看对方会不会说出【那它不聪明啊】。
常见误区
- 一上来就用【位、字节、电压】这些词。术语是屏障,不是桥梁。
- 以为讲给小孩听是降级。能把复杂的事讲简单,恰恰说明你真的掌握了。
自测三问(点开对答案)
1. 这个专栏为什么选【灯】来讲二进制? —— 因为看灯的亮灭比看电压高低直观得多,小朋友一眼能懂,也不用引入任何术语。 2. 教材把专栏放在每章末尾,用意是什么? —— 检验讲的人自己懂没懂——能讲给别人听,才算真懂。 3. 讲给新人听时最该避开什么? —— 避开术语。先把【灯】和【按单办事】讲清楚,术语可以以后再补。- ☐ 下一章(第三章 计算机在计算小数时会出错的原因)
相关笔记
- 计算机用二进制处理信息的原因 — 专栏要讲的第一件事的背景
- 二进制到底是什么 — 专栏要讲的第二件事
- 🔵 计算机基础 · 索引 — 硬件底层的入门课
- ⚙️ 程序是怎样跑起来的 · 索引