二进制就是位权为 2 的幂的计数法:从右往左依次 1、2、4、8……所以 1011 是 8+2+1=11。
2.1 解释了为什么用二进制,这一节说清它本身是什么、怎么和十进制互换算。
一、只有两个数字,但每一位都有【位权】
二进制只有 0 和 1 两个数字,逢二进一。 看起来单薄,但它给每一位配了一个【位权】:从右往左依次是 1、2、4、8、16…… 所以 1011 不能读成【一千零一十一】,它是 8 + 0 + 2 + 1 = 11。 位权这套记法不特殊——十进制每一位也是位权:1、10、100、1000,只不过底数是 10。
二、两条换算路子
十进制 → 二进制:不停除 2 取余数,最后把余数倒着读。 例:11 ÷ 2 余 1,5 ÷ 2 余 1,2 ÷ 2 余 0,1 ÷ 2 余 1 —— 倒着读就是 1011。 二进制 → 十进制:把那些为 1 的位的位权加起来。 例:1011 的第 4、2、1 位是 1,8 + 2 + 1 = 11。 两条路子互为逆过程,练熟两三次就习惯【一位只有 0 和 1】了。
三、位数代表什么
经常听到【8 位】【16 位】【32 位】——它说的是【一次能摆几盏灯】。 8 位能表示 0~255 共 256 个数;16 位能表示 0~65535。 规律很简单:n 位能表示 2 的 n 次方个数。 所以位数直接决定了【一次能装多大的数】,也决定了后面要讲的整数范围、溢出这些问题。
四、为什么这套表示法值得先学
因为书上后面所有内容——内存地址、补码、位运算、颜色、字符编码——都只是二进制换了种说法。 把位权这一件事吃透,后面每个新名词都只是给它换面具。
五、动手 Demo:十进制与二进制互相换算
二进制的每一位都带一个位权:从右往左依次是 1、2、4、8、16…… 所以 1011 不读一千零一十一,它是 8 + 2 + 1 = 11。
for v in [0, 1, 2, 5, 10, 11, 15, 26]:
parts = [str(1 << i) for i in range(15, -1, -1) if v & (1 << i)]
print("%3d -> %-8s = %s" % (v, format(v, "08b"), " + ".join(parts or ["0"])))
实跑输出:
--------------------------------------------------------------------
十进制与二进制互相换算
--------------------------------------------------------------------
**二进制的每一位都带着一个【位权】**:从右往左依次是 1、2、4、8、16……
所以 1011 不读【一千零一十一】,它是 8 + 2 + 1 = 11。
十进制 8 位二进制 它是由哪几块拼出来的
-----------------------------------------------
0 00000000 0
1 00000001 1
2 00000010 2
5 00000101 4 + 1
10 00001010 8 + 2
11 00001011 8 + 2 + 1
15 00001111 8 + 4 + 2 + 1
26 00011010 16 + 8 + 2
两条换算路子:
十进制 -> 二进制 除 2 取余数,倒着读
二进制 -> 十进制 把是 1 的那些位的位权加起来
例:11 除 2 依次得余数 1、1、0、1,倒着读就是 1011。
**位权这套记法不难,难的是习惯【一位只有 0 和 1】。**
换算的两个方向:除 2 取余倒着读(十到二)、把为 1 的位的位权相加(二到十)。 底数换成 2 而已,位权这套记法在十进制里你已经用了半辈子。
30 秒实验
- 把今天的日期(月和日)分别写成二进制,写在纸上。
- 数一下:你手机号里最大的那一位,要几个二进制位才装得下?
常见误区
- 把 1011 读成一千零一十一。二进制里没有【十】这个数字,读法完全不同。
- 以为 8 位就是 8 个数。8 位是 2 的 8 次方=256 个数(0~255)。
自测三问(点开对答案)
1. 二进制的位权是什么规律? —— 从右往左依次是 1、2、4、8、16……也就是 2 的幂。 2. 1011 换成十进制是多少? —— 8 + 0 + 2 + 1 = 11。 3. n 位二进制能表示多少个数? —— 2 的 n 次方个;8 位是 256 个(0~255)。- ☐ 下一节(2.3 移位运算与乘除运算的关系)
相关笔记
- 计算机用二进制处理信息的原因 — 为什么只能是 0 和 1
- 移位运算与乘除运算的关系 — 位权带来的第一个便宜
- 🔵 计算机基础 · 索引 — 硬件底层的入门课
- ⚙️ 程序是怎样跑起来的 · 索引