欢迎来到数据的世界!

你有没有想过,电脑是如何分辨你想相加的“数字”、你名字里的“字母”,还是测验中“真/假”的答案呢?由于电脑底层实际上只懂电信号(开或关),我们需要利用数据类型 (Data Types) 来告诉电脑如何解读这些 1 和 0。在本章中,我们将探讨数据的“基础组件”,以及电脑如何处理数字、文本和逻辑。如果一开始觉得数学部分很多,请别担心——一旦你看出了其中的规律,这就像学会了一种秘密代码一样有趣!

1. “基础知识”:原始数据类型

在我们深入探讨二进制之前,先来看看我们给数据贴上的标签。想象这些数据类型就像形状不同的容器;你不会把汤装进滤网里,同样地,你也不会把名字存放在“数字”盒子里。

你需要掌握的“五大类型”:

  • 整数 (Integer): 整数(例如:7, -12, 1066)。不允许有小数点!
  • 实数 (Real/Floating Point): 带有小数部分的数字(例如:3.14, -0.5, 10.0)。
  • 字符 (Character): 单个字母、数字或符号(例如:'A', '!', '3')。
  • 字符串 (String): 字符的集合,通常用于文本(例如:"Hello World", "Computer Science")。
  • 布尔值 (Boolean): 只有两个值:True(真)False(假)(常用于开关或逻辑判断)。

快速复习: 你会为价格使用哪种数据类型?实数 (Real)。那班级里学生的人数呢?整数 (Integer)

2. 数字系统:二进制与十六进制

我们日常生活中使用十进制 (Denary)。电脑则使用二进制 (Binary)。有时,人类会使用十六进制 (Hexadecimal) 作为简写,因为二进制写起来实在太长且令人困惑!

二进制 (Binary, 基数 2)

二进制只使用两个数字:01。二进制的每一“位”都是 2 的幂次方。

示例:二进制数 1011
\( (1 \times 8) + (0 \times 4) + (1 \times 2) + (1 \times 1) = 11 \) (十进制)。

十六进制 (Hexadecimal, 基数 16)

十六进制使用 0-9,然后用 A, B, C, D, E, F 来表示 10-15 的值。对人类来说,阅读 'FF' 比阅读 '11111111' 要容易得多!

如何将十六进制转换为二进制:
将每个十六进制数字转换为 4 位的二进制“半字节 (nibble)”。
示例:十六进制 'A3'
A = 10 = 1010 (二进制)
3 = 3 = 0011 (二进制)
因此,A3 = 10100011

你知道吗? 十六进制常用于 HTML 颜色代码(例如 #FF0000 代表红色)和 MAC 地址。

重点总结: 二进制是给电脑看的;十六进制是人类便于阅读的二进制简写;十进制是给我们人类用的。

3. 二进制算术:加法与减法

二进制的加法和十进制很像,只是你会更早发生“进位”!

加法规则:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 1 = 0(进位 1)
  • 1 + 1 + 1 = 1(进位 1)

常见错误: 忘记进位 1 会导致整道算式出错。请务必在下一位的上方清楚写下你的进位数!

减法:

在 OCR 课程大纲中,我们通常通过加上一个负数来进行减法。要做到这一点,我们首先需要知道如何表示负数。

4. 负数:符号位与数值表示法 (Sign & Magnitude) 和 二补数 (Two's Complement)

由于二进制中没有 "-" 符号,我们必须用一位来表示正负号。

符号位与数值 (Sign and Magnitude)

最左侧的位元称为符号位 (Sign Bit)
0 = 正数 (+)
1 = 负数 (-)
示例(8-bit): 00000101 是 +5。10000101 是 -5。

二补数 (Two's Complement)

这是最推荐的方法,因为它让 CPU 的运算更简单。若要将一个正数变为负数:
1. 从正数的二进制开始。
2. 反转 (Flip) 所有位元(0 变 1,1 变 0)。
3. 将结果加 1

记忆口诀: “反转并加一”,即可轻松将正数变负数!

关键总结: 二补数更好,是因为它允许电脑使用与加法相同的硬件来进行减法运算。

5. 实数:浮点数表示法 (Floating Point Representation)

我们该如何在二进制中储存 12.5?我们使用类似科学记数法(例如 \(1.25 \times 10^1\))的方法。在二进制中,它被拆分为两部分:尾数 (Mantissa)指数 (Exponent)

公式: \( \text{Number} = \text{Mantissa} \times 2^{\text{Exponent}} \)

归一化 (Normalisation)

为了确保尽可能精确,我们会对数字进行归一化。归一化后的正数总是从 01 开始;归一化后的负数总是从 10 开始。

如果一开始觉得困难,请别担心: 只要记住尾数给你“数字”,而指数告诉你小数点该往哪移。正指数将小数点向右移;负指数将小数点向左移。

快速复习: 进行归一化是为了在给定字长(位元数)下提供最大精确度

6. 字符集:ASCII 与 Unicode

字符集是一个庞大的“查询表”,将唯一的二进制数与特定的字符连接起来。

  • ASCII: 使用 7 或 8 位元,可以表示 128(或 256)个字符。非常适合英语,但没有足够空间容纳符号(如表情符号)或不同语言(如中文或阿拉伯语)。
  • Unicode: 使用 16 或 32 位元,可以表示数百万个字符!它包含了所有语言,甚至包括 🍕 表情符号。

权衡考量: Unicode 可以表示更多字符,但与 ASCII 相比,它在每个字符上占用更多储存空间

你知道吗? Unicode 的前 128 个编码与 ASCII 完全相同,以保持兼容性!

本章总结

  • 原始数据类型: 数据的基本标签(整数、实数等)。
  • 二进制/十六进制: 我们如何用基数 2 和 16 表示数字。
  • 二补数: 处理负数最聪明的方法。
  • 浮点数: 我们如何使用尾数和指数处理小数。
  • 字符集: 用于基础的 ASCII 和涵盖一切的 Unicode。