欢迎来到二进制的世界!

你有没有想过,电脑明明只是一堆电线和塑料,却能让你观看高清电影、玩大型游戏或帮你写报告?这一切都源于一个非常简单的概念:二进制(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)

重点总结:十六进制是一种对人类友好的二进制表示法。它并不会改变电脑的工作方式,只是让程序员的工作变得更轻松!