欢迎来到二进制的世界!
你有没有想过,电脑明明只是一堆电线和塑料,却能让你观看高清电影、玩大型游戏或帮你写报告?这一切都源于一个非常简单的概念:二进制(Binary)。在本章中,我们将探讨电脑如何仅利用 0 和 1 这两个数字来完成所有任务!如果一开始觉得这像外星语言,请别担心;读完这些笔记后,你将能像专家一样轻松地用“电脑语言”沟通。
1. 什么是二进制?为什么我们使用它?
电脑由数以十亿计的微小开关组成,称为晶体管(Transistors)。这些开关只有两种状态:开(ON,以 1 表示)或关(OFF,以 0 表示)。这种“双状态”系统就是我们所说的二进制。
关键概念
- 位(Bit):数据的最小单位。它是 Binary Digit 的缩写,只能是 0 或 1。
- 二进制模式(Binary Pattern):一系列位的组合(如 1010),代表着特定的数据或指令。
- 状态(States):你使用的位越多,能创建的唯一“模式”或“状态”就越多。
数学小技巧:有多少种状态?
想知道一个二进制模式能代表多少种不同的东西,可以使用这个简单的公式:\(2^n\),其中 \(n\) 代表位的数量。
例子: 如果你有 3 个位,你可以有 \(2^3\) (\(2 \times 2 \times 2\)) = 8 种不同的状态。
你知道吗?电脑上的一切——图像、音乐,甚至是你在这里读到的文字,都是以一长串 0 和 1 的形式存储的!
重点总结:电脑使用二进制是因为它们的硬件是由只有两种状态(开/关)的开关组成的。我们使用公式 \(2^n\) 来计算一组位可以存储多少个数值。
2. 处理数字:无符号整数(Unsigned Integers)
在十进制(Denary)系统中(我们日常使用的基数 10 系统),我们有个位、十位、百位等。而在二进制(Binary)(基数 2)中,每向左移动一位,位值就会翻倍。
8 位二进制表
为了考试,你需要记住 8 位的数字。以下是各位的值:
128, 64, 32, 16, 8, 4, 2, 1
如何将二进制转换为十进制
1. 画出表格。
2. 将你的二进制数字(例如 10001010)填入表格中。
3. 将有 1 的位置上的数值加起来。
例子:10001010
\(128 + 8 + 2 = 138\)
如何将十进制转换为二进制
1. 从左边开始(128)。
2. 如果你的数字大于该位值,写下 1 并减去该值。
3. 如果不大于,写下 0 并移动到下一栏。
快速回顾:无符号整数永远是正数。一个 8 位的无符号整数可以表示 0 到 255 之间的数字。
3. 有符号整数:二补数(Two's Complement)
电脑也需要存储负数,我们使用一种称为二补数(Two's Complement)的系统。在这个系统中,最高有效位(Most Significant Bit,最左边的那一位)变为负数。
8 位有符号表
-128, 64, 32, 16, 8, 4, 2, 1
“翻转并加 1”的技巧
如果你需要将正数变为负数:
1. 写出该正数的二进制形式(例如:5 是 00000101)。
2. 反转(Invert)所有位(0 变 1,1 变 0) -> 11111010。
3. 将结果加 1 -> 11111011。这就是 -5!
常见错误:别忘了在二补数中,8 位的范围是 -128 到 +127。它与无符号整数的范围不同!
重点总结:二补数通过将最左边的位定义为负值,使电脑能够表示负数。
4. 二进制加法
二进制加法就像普通加法一样,只是你需要更快地进行“进位(Carry over)”!
四个规则:
- \(0 + 0 = 0\)
- \(0 + 1 = 1\)
- \(1 + 1 = 0\) (进位 1)
- \(1 + 1 + 1 = 1\) (进位 1)
什么是溢出(Overflow)?
想象一辆汽车的里程表只有 3 位数。如果你开到 999 再多走一英里,它会归零变为 000。这就是溢出。在二进制中,如果你将两个 8 位数字相加,结果需要第 9 位,那么多出来的位就会丢失。这可能会导致电脑计算出错误答案甚至死机!
重点总结:二进制加法遵循简单的规则,但当结果太大而无法放入分配的位数时,就会发生溢出。
5. 二进制移位
向左或向右移位是电脑进行乘法或除法运算的一种极快方法。
逻辑移位(用于无符号整数)
- 左移(Left Shift):将所有位向左移动。右边留下的空位补 0。每移动一次,数字就会乘以 2。
- 右移(Right Shift):将所有位向右移动。每移动一次,数字就会除以 2(忽略余数)。
算术移位(用于有符号整数)
当你对一个有符号(二补数)数字进行右移时,你必须保持符号位(最左边的位)不变,以确保负数依然保持为负数。
记忆小撇步:左(Left)代表变大(Larger/Multiply);右(Right)代表减少(Reduce/Divide)。
6. 十六进制(Hexadecimal,基数 16)
二进制对电脑很方便,但人类很难阅读像 11011010 这样长的一串数字。因此,我们使用十六进制作为“简写”。
为什么要用十六进制?
- 人类更易于阅读和记忆。
- 输入时出错的机会较少。
- 十六进制与二进制之间的转换非常简单。
十六进制的值
十六进制使用 0-9,然后用字母表示 10-15 的值:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15)
如何将二进制转换为十六进制
1. 将 8 位二进制拆分为两组 4 位(称为半字节 Nibbles)。
2. 计算每组半字节的十进制值(0-15)。
3. 将该值转换为对应的十六进制字符。
例子:1010 1100
1010 = 10 (十六进制为 A)
1100 = 12 (十六进制为 C)
结果 = AC
快速回顾:一个十六进制位精确代表 4 个位(bits)。两个十六进制位代表 8 个位(1 个字节 Byte)。
重点总结:十六进制是一种对人类友好的二进制表示法。它并不会改变电脑的工作方式,只是让程序员的工作变得更轻松!