8个开关,凭什么能表达256种情况?
——写给初学者的二进制入门:从"有多少种情况"到"为什么这样对应"
一、先从一个开关说起
想象你面前有一个电灯开关。它只有两种状态:关或者开。
计算机里最小的信息单位就像这个开关,叫做 位(bit,比特)。一个位只有两种取值,我们习惯用 0 和 1 来表示。
注意,0 和 1 只是我们给两种状态起的"名字"。你完全可以把它们叫做"关/开"、"黑/白"、"否/是"。后面你会发现,这一点非常重要。
二、开关越多,情况"翻倍"增长
一个开关有 2 种情况。那两个开关呢?我们把所有组合列出来:
| 开关1 | 开关2 |
|---|---|
| 0 | 0 |
| 0 | 1 |
| 1 | 0 |
| 1 | 1 |
一共 4 种。再加一个开关,每一种原有的组合后面都可以接 0 或 1,情况数就翻了一倍,变成 8 种。
规律很清楚:每多一个位,情况数就乘以 2。
| 位数 | 情况数 | 写成算式 |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 4 | 2×2 |
| 3 | 8 | 2×2×2 |
| 4 | 16 | 2⁴ |
| 8 | 256 | 2⁸ |
所以,8 个位(也叫 1 个字节,Byte)一共能表达 2⁸ = 256 种不同的情况。
这里有个容易踩的坑:256 是"情况的个数",而不是"最大的数"。因为我们习惯从 0 开始数,这 256 种情况对应的数是 0 到 255,最大的是 255,不是 256。
打个比方:一栋楼有 256 个房间,如果房间号从 0 号开始编,最后一个房间就是 255 号。
三、二进制和十进制怎么互相转换
1. 先回顾十进制
十进制数 352,我们为什么读作"三百五十二"?因为每一位都有自己的"分量":
352 = 3×100 + 5×10 + 2×1
从右往左,每一位的分量是 1、10、100……,每次乘以 10。这就是"逢十进一"。
2. 二进制是同样的道理
二进制只有 0 和 1,"逢二进一",所以每一位的分量是 1、2、4、8、16……,每次乘以 2。8 个位从右往左的分量是:
| 位的顺序(从右数) | 第8位 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
|---|---|---|---|---|---|---|---|---|
| 分量 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
3. 二进制 → 十进制:把"开着"的位的分量加起来
例 1:00000100 只有"4"这一位是 1,所以结果就是 4。
(这就是你可能听过的"二进制 100 等于十进制 4"。注意,这里的 100 读作"一零零",不是"一百"。)
例 2:10110101 这一串里,是 1 的位有 128、32、16、4、1,加起来:
128 + 32 + 16 + 4 + 1 = 181
再看两个极端情况:
00000000= 0(全关)11111111= 128+64+32+16+8+4+2+1 = 255(全开)
这正好印证了前面的结论:8 位能表示 0 到 255,共 256 种。
4. 十进制 → 二进制:从大到小"凑"
把十进制数 100 转成二进制。从最大的分量 128 开始问:"装得下吗?"
| 分量 | 剩余 | 装得下吗? | 这一位 |
|---|---|---|---|
| 128 | 100 | 不行(128 > 100) | 0 |
| 64 | 100 | 可以,剩 36 | 1 |
| 32 | 36 | 可以,剩 4 | 1 |
| 16 | 4 | 不行 | 0 |
| 8 | 4 | 不行 | 0 |
| 4 | 4 | 可以,剩 0 | 1 |
| 2 | 0 | 不行 | 0 |
| 1 | 0 | 不行 | 0 |
结果:100 = 01100100。
四、本质:对应关系其实是"人定的"
讲到这里,请你停下来想一个更根本的问题:
8 个开关到底"是"什么?
它们本质上只是 256 种不同的状态。至于每种状态"代表"什么,这是我们人类约定出来的,不是开关自己带的。
所以,没有任何规定说 00000100 必须代表 4。你完全可以自己规定:
00000100代表"苹果"00000101代表"香蕉"- 或者把 256 种状态随便对应 256 个不同的数,打乱顺序也行
只要使用的双方约定一致,这样的规则就是"可行"的。现实中也到处都是这样的约定:
- 字符:在 ASCII 编码里,
01000001约定为大写字母 A(它的十进制是 65)。 - 颜色:电脑屏幕上,红、绿、蓝每个颜色通道常用 1 个字节,也就是 0~255 共 256 级亮度。
- 同一串 0/1,不同含义:同样是
11111111,当作"普通的数"是 255;但在另一种约定里(用来表示负数的"补码"),它表示 -1。
最后一点很能说明问题:0 和 1 本身没有意义,意义来自约定。
五、那为什么大家还是用"标准的"对应方式?
既然可以随便对应,为什么全世界的计算机基本都用"按分量相加"的方式(1、2、4、8……)呢?因为这种对应方式特别好用。
我们来做个对比。假设只有 3 个开关(8 种状态),下面是两种对应方式:
| 状态 | 标准对应(分量 4、2、1) | 随便对应(打乱的) |
|---|---|---|
| 000 | 0 | 5 |
| 001 | 1 | 2 |
| 010 | 2 | 7 |
| 011 | 3 | 0 |
| 100 | 4 | 3 |
| 101 | 5 | 6 |
| 110 | 6 | 1 |
| 111 | 7 | 4 |
两种都是"一个状态对一个数,不重复不遗漏",从信息量上讲都没问题。但用起来差别巨大:
1. 标准对应有规律,不用死记 随便对应要靠一张对照表,256 种状态就要记 256 条,而且换一个人可能用另一张表。标准对应只需要记住一条规则:每一位的分量是 1、2、4、8……,就能推出所有情况。
2. 标准对应可以直接做运算 试试 3 + 1:
011 (3)
+ 001 (1)
-----
100 (4)
你会发现,这和十进制的竖式加法一模一样:满 2 就向前进 1。电路只要实现"逢二进一"这一条规则,就能做加法。
用"随便对应"呢?011 是 0,001 是 2,结果应该是 2,也就是 001。但开关层面完全看不出规律,每一种加法都得查表,电路会复杂得多。
3. 标准对应让"大小"一目了然 从左往右,第一个不同的位谁是 1,谁就更大。比较大小不用查表。随便对应则做不到。
4. 标准对应方便扩展 8 位不够用,就再加一位,变成 9 位,能表示的范围刚好翻倍,而且原来的规则完全不用改。
5. 标准对应和硬件天然匹配 每个位就是一个独立的开关(电路里的高/低电压),各管各的分量,设计起来最简单。
总结一下:"随便对应"在原理上是允许的,但"标准对应"让计算变得简单、统一、可扩展。 计算机选择它,不是因为它是唯一的办法,而是因为它是最省事、最好用的办法。
六、小结
- 一个位有 2 种状态;每多一个位,情况数翻倍。
- 8 位一共有 2⁸ = 256 种情况,对应十进制的 0~255。
- 二进制每一位的分量是 1、2、4、8、16、32、64、128,把"是 1"的位的分量加起来,就得到十进制数。
- 本质上,位串只是一些状态,含义是人约定的,可以任意对应。
- 我们通常用"按分量相加"的对应方式,是因为它有规律、能直接运算、好比较、易扩展。
七、小练习
- 二进制
00001010是十进制的多少? - 十进制的
37用 8 位二进制怎么写? - 6 个位一共能表达多少种情况?
- 如果要表达 1000 种不同的情况,至少需要几个位?
参考答案
- 8 + 2 = 10
- 37 = 32 + 4 + 1,写作 00100101
- 2⁶ = 64 种
- 2⁹ = 512 不够,2¹⁰ = 1024 够了,所以至少需要 10 位