欢迎来到数据表示法!

你有没有想过,电脑本质上只是一堆微小的电子开关,它是如何让你观看高清电影或畅玩大型游戏的呢?这一切都归功于数据表示法 (Data Representation)。在本章中,我们将学习电脑如何进行「计数」,以及它们如何将简单的数字转化为我们日常看到的文字和符号。别担心,一开始看起来可能有很多数学运算——但只要你掌握了规律,就会发现它就像数 1、2、3(或者应该说 0 和 1)一样简单!

1. 三大进位制

在日常生活中,我们使用十进制 (Decimal)。但电脑更偏好二进制 (Binary),而程序员为了让数值更易于阅读,通常会使用十六进制 (Hexadecimal)。让我们逐一拆解:

A. 十进制 (Decimal, Base-10)

这是你从幼儿园就开始使用的系统。它使用了 10 个数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
类比:你可以把它想象成用十根手指头数数。

B. 二进制 (Binary, Base-2)

电脑使用电力运作,通常只有「开」或「关」两种状态。因此,它们只使用 2 个数字:0 和 1。每一个数字称为一个位元 (bit)(即 Binary Digit 的缩写)。
类比:就像一个电灯开关,不是向上(1)就是向下(0)。

C. 十六进制 (Hexadecimal, Base-16)

此系统使用 16 个符号。由于数字在 9 之后就不够用了,我们便使用字母来表示:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A (10), B (11), C (12), D (13), E (14), F (15)

快速复习:为什么要用十六进制?

10110110 这样的二进制字符串对人类来说很难阅读。十六进制就像是一种「速记法」。一个十六进制数字可以代表四个二进制位元!对于程序员来说,记住 B6 比记住 10110110 要容易得多。

重点总结:二进制是给电脑硬件用的;十进制是给人类用的;十六进制则是程序员的「中间地带」。

2. 不同进位之间的转换

转换数字看起来可能很吓人,但其实只要遵循步骤就能完成。让我们看看 9569 课程大纲中最常见的转换方式。

A. 二进制转十进制(「加权」法)

二进制数字中的每个位置都有一个「权重」,该权重是 2 的幂次方,从右边开始计算(即 \( 2^0 \))。

逐步示例:将 1011 转换为十进制
1. 从右至左写出 2 的幂次方:\( 8, 4, 2, 1 \)
2. 将二进制数字置于下方:
(8 × 1) + (4 × 0) + (2 × 1) + (1 × 1)
3. 将它们相加:\( 8 + 0 + 2 + 1 = 11 \)
4. 因此,\( 1011_2 = 11_{10} \)

B. 十进制转二进制(「除以 2」法)

不断将数字除以 2,并记录余数。

逐步示例:将 13 转换为二进制
1. 13 ÷ 2 = 6,余数 1
2. 6 ÷ 2 = 3,余数 0
3. 3 ÷ 2 = 1,余数 1
4. 1 ÷ 2 = 0,余数 1
5. 由下往上读取余数:1101

C. 二进制转十六进制(「神奇 4 位」规则)

这是最简单的转换方式!将二进制位元分成四个一组(从右边开始分组)。

逐步示例:将 11101011 转换为十六进制
1. 分成两组:11101011
2. 将每组转换为十进制:\( 1110 = 14 \),\( 1011 = 11 \)
3. 将这些数值转换为十六进制字母:\( 14 = E \),\( 11 = B \)
4. 结果为:EB

避开常见错误!

在进行十进制转十六进制时,别忘了 10 是 A,而不是「10」。如果你在十六进制代码中写下「10」,电脑会认为你分别是指「1」和「0」!

重点总结:永远记住二进制的「位值」:128, 64, 32, 16, 8, 4, 2, 1。如果位元是 1,就加上该数;如果是 0,就跳过它!

3. 在计算机领域的应用

我们为什么要学这些?因为这些系统在科技世界无处不在!

二进制:用于中央处理器 (CPU)内存 (RAM)。在最底层,所有东西都是 1 或 0。
十进制:用于用户输入。当你在计算器上输入「25」时,电脑会获取该十进制输入,并将其转换为二进制来进行运算。
十六进制:用于 HTML 颜色代码(例如 #FF0000 代表红色)、网络中的 MAC 地址,以及除错时使用的内存地址

你知道吗?

世界上总共有 10 种人:一种是懂二进制的,另一种是不懂的!(等等……那个「10」其实就是二进制的「2」!)

4. 字符编码:ASCII 与 Unicode

数字固然好用,但我们如何表示字母 'A' 或表情符号呢?我们使用字符集 (Character Sets),它们基本上就是巨大的对照表,将数字对应到特定的字符。

A. ASCII (美国标准信息交换码)

ASCII 是一个较旧且简单的系统。它使用 7 个位元(在扩展 ASCII 中使用 8 个位元)来表示字符。
- 示例:在 ASCII 中,数字 65 代表 'A',97 代表 'a'。
- 局限性:由于它使用的位元数较少,它只能表示英文字母、数字和一些符号。它无法处理中文或阿拉伯文等其他语言。

B. Unicode

Unicode 的诞生就是为了克服 ASCII 的局限性。它使用更多的位元(通常为 16 或 32 位元),容许超过一百万种可能的字符!
- 用途:它涵盖了世界上几乎每一种书写语言,外加数学符号和表情符号 (Emojis) 🚀。
- 关系:Unicode 的设计旨在与 ASCII 「向后兼容」。这意味着 Unicode 的前 128 个字符与 ASCII 完全相同。

快速复习:ASCII 与 Unicode

ASCII:体积小、效率高,但仅限于英语。
Unicode:体积大、通用性强,用于现代网页和国际化软件。

重点总结:字符编码是电脑能读懂的二进制数字与我们屏幕上阅读的人类语言之间的「桥梁」。

最终复习清单

在进入下一章之前,请确保你能:
- [ ] 解释二进制、十进制与十六进制的区别。
- [ ] 将正整数在十进制与二进制之间互相转换。
- [ ] 使用 4 位元分组法在二进制与十六进制之间转换。
- [ ] 举出十六进制的应用例子(如 CSS 颜色)。
- [ ] 解释为什么全球性应用程序会偏好使用 Unicode 而非 ASCII。

继续练习这些转换吧!这就像解谜一样——做得越多,你就会越熟练!