用二进制不是设计者的偏好,是物理条件逼出来的——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 秒实验
- 拿一节电池和一个 LED,想想【亮/灭】这两种状态被判错的难度有多大。
- 查一查你电脑里 CPU 的工作电压(一般在 1V 出头),算算它对应的两档判别余地。
常见误区
- 以为用二进制是【因为计算机笨】。是因为两态电路最可靠,而可靠比聪明重要。
- 以为十进制做不到。做不到的是【便宜又可靠的十进制电路】,不是十进制本身。
自测三问(点开对答案)
1. 计算机为什么用二进制处理信息? —— IC 引脚只有 0V/5V 两种状态,两种状态最不容易被噪声干扰而认错。 2. 十进制电路的问题在哪? —— 十档均分后每档太窄,稍有干扰就跳档,判别余地只有二进制的一半不到。 3. 二进制的运算规则有多少条? —— 加法和乘法各只有四条,十进制的加乘则各有 100 条。- ☐ 下一节(2.2 二进制到底是什么)
相关笔记
- 二进制到底是什么 — 这套表示法自身长什么样
- 便于计算机处理的【2的补码】 — 负数在这套表示法里怎么办
- 对计算机来说什么都是数字 — 姊妹篇里同一件事的另一种讲法
- 🔵 计算机基础 · 索引 — 硬件底层的入门课
- ⚙️ 程序是怎样跑起来的 · 索引