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

用二进制不是设计者的偏好,是物理条件逼出来的——IC 的引脚只有两种状态,两种状态最不容易认错。

📝 本节和前面几节的关系

第一章讲完了 CPU 怎么跑,但它一直在处理【0 和 1】这件事始终没展开。这一节从物理层面回答为什么要这样。

一、不是选择,是物理条件

先看硬件:IC(集成电路)的所有引脚,只有两种情况——直流电压为 0V 或 5V。 教材把这句话放在最前面,因为它是整条链子的起点。 于是计算机内部的信息只能用两个值表示:有 / 无、通 / 断、高 / 低。 换成数字就是 0 和 1——二进制不是聪明人挑的,是电路只给得出两个可靠的答案。

二、那为什么不做十进制

十进制看上去更贴近人,但做不成可靠的电路。 一根线如果想传 0~9,就得把 5V 均分成十档,每档只有 0.5V 宽。 电路里总有噪声、电压总在漂移,偏离两成以上就跳到隔壁档去了。 对比一下:两档时每档 2.5V 宽,允许偏离 1.25V——判别余地差了五倍。 所以教材的结论很务实:与其把十档做得精,不如把两态做得准。

三、二进制的第二个好处:规则少

光可靠还不够,运算也得简单。 二进制加法的规则只有四条:0+0=0、0+1=1、1+0=1、1+1=10(进位)。 乘法同样只有四条。而十进制的加法和乘法,各有 100 条要记。 电路是按规则搭出来的:规则越少,电路越简单、越快、越不容易出错。

四、计算机处理的一切都是 0 和 1

顺着这个逻辑往下想:既然只能表示 0/1,那数字、文字、颜色、声音、程序本身,都得想办法变成 0/1 的排列。 这一章后面几节要讲的,正是【怎么把常见的数据搬进这套表示法】。 而表示法的第一块砖,就是下一节的二进制本身。

五、动手 Demo:为什么计算机非用二进制不可

教材给的答案是物理层面的:IC 的引脚只有两种状态。 换个问法:如果非要做十进制(一根线传 0~9 十档电压)会怎样?

levels = [("二进制", 2), ("十进制", 10), ("十六进制", 16)]
for name, n in levels:
    step = 5.0 / n
    print("%s:每档 %.2fV 宽,允许偏离 %.2fV" % (name, step, step / 2))

实跑输出:

--------------------------------------------------------------------
为什么计算机非用二进制不可
--------------------------------------------------------------------

教材给的答案是物理层面的:**IC(集成电路)的引脚只有两种状态。**
有电流 / 没电流、高电压 / 低电压——这是电路上最容易分清的两种状态。

  换个问法:如果非要做十进制(一根线传 0~9 十档电压)会怎样?

  进制         一根线要区分     电压怎么分          每档允许的误差
  ----------------------------------------------------------------------------
  二进制       2 种(0/1)      0V / 5V 两档        约 ±1.25V,容错最大
  十进制       10 种(0~9)     0~5V 均分十档       约 ±0.25V,容错很小
  十六进制     16 种(0~F)     0~5V 均分十六档     约 ±0.16V,几乎不能有噪声

  误差范围=每档宽度的一半(5V 除以档数再除以 2):
    两档     每档 2.5V 宽  ->  偏离 1.25V 以内都算同一个值
    十档     每档 0.5V 宽  ->  偏离 0.25V 就跳档了
    十六档   每档 0.31V 宽 ->  稍有干扰就认错

  **所以不是【二进制简单】,是【两种状态最不容易认错】。**
  电路总有噪声、电压总在漂移——把判别余地留得越宽,机器就越可靠。

档数越多,每档越窄,能容忍的误差越小:两档允许 ±1.25V,十六档只允许 ±0.16V。 不是【二进制简单】,是【两种状态最不容易认错】。

30 秒实验

  1. 拿一节电池和一个 LED,想想【亮/灭】这两种状态被判错的难度有多大。
  2. 查一查你电脑里 CPU 的工作电压(一般在 1V 出头),算算它对应的两档判别余地。

常见误区

  1. 以为用二进制是【因为计算机笨】。是因为两态电路最可靠,而可靠比聪明重要。
  2. 以为十进制做不到。做不到的是【便宜又可靠的十进制电路】,不是十进制本身。
自测三问(点开对答案) 1. 计算机为什么用二进制处理信息? —— IC 引脚只有 0V/5V 两种状态,两种状态最不容易被噪声干扰而认错。 2. 十进制电路的问题在哪? —— 十档均分后每档太窄,稍有干扰就跳档,判别余地只有二进制的一半不到。 3. 二进制的运算规则有多少条? —— 加法和乘法各只有四条,十进制的加乘则各有 100 条。

相关笔记