⚙️ 第二章 用二进制来理解数据
📄 一句话概括

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 秒实验

  1. 找一个人(家人、同事都行),用【灯】的比方把二进制讲给他听,讲讲看他会不会追问。
  2. 把 CPU 讲成【会看灯的按单办事的机器】,看对方会不会说出【那它不聪明啊】。

常见误区

  1. 一上来就用【位、字节、电压】这些词。术语是屏障,不是桥梁。
  2. 以为讲给小孩听是降级。能把复杂的事讲简单,恰恰说明你真的掌握了。
自测三问(点开对答案) 1. 这个专栏为什么选【灯】来讲二进制? —— 因为看灯的亮灭比看电压高低直观得多,小朋友一眼能懂,也不用引入任何术语。 2. 教材把专栏放在每章末尾,用意是什么? —— 检验讲的人自己懂没懂——能讲给别人听,才算真懂。 3. 讲给新人听时最该避开什么? —— 避开术语。先把【灯】和【按单办事】讲清楚,术语可以以后再补。

相关笔记