1. 简介

在本教程中,我们将学习与替代数字系统相关的基本概念,以及它们存在的原因。

我们将首先讨论数字系统的一般概念,以及它们与集合分组问题的关系。

接着,我们将学习最常用的数字系统:十进制系统。作为替代方案,我们还将了解计算机科学中常用的三种数字系统:二进制、八进制和十六进制。

在本教程结束时,你将熟悉当今最常用和略少使用的数字系统。

2. 数字系统及其存在的原因

2.1. 什么是数字系统?

数字系统是一套用于表示和操作数字的规则。它告诉我们如何组合符号来表达数字,并将它们相互关联。它基于“数”和“集合”这两个更基础的概念。

在“数”和“集合”之间,集合是更基础的概念。虽然我们通常认为计数是数学知识的基础,但事实上,在数学哲学中,数并不是最基础的概念。它们是从集合及其相似性中衍生出来的。

根据罗素的定义,一个集合的数是所有与该集合相似的集合的集合。如果这样,我们可以说数字系统就是用于比较所有不相似集合的规则系统。

2.2. 实际上这意味着什么?

举个例子来说明这个问题。假设宇宙中只存在一类对象;正如我们所知,宇宙中的一切“要么是鸭子,要么不是鸭子”:

Rendered by QuickLaTeX.com

假设宇宙中只有一个鸭子,那么宇宙就只包含以下两个集合:

U=\{\text{duck}\}, V=\{\O\}

2.3. 最简单的数字系统

在这个宇宙中,如果我们想表示存在的集合的大小,我们只需要一个符号。例如,每当我们要表示存在的唯一对象时,可以写一个竖线“|”。如果不表示它,就不写任何符号。

我们可以建立一个符号与对象之间的对应表,完美描述一切存在的东西:

Rendered by QuickLaTeX.com

如果我们的鸭子繁殖了,我们就需要再加一个竖线来表示新增的元素:

Rendered by QuickLaTeX.com

2.4. 它也适用于其他对象

注意,只要我们不断向集合中添加对象,这个过程就可以无限重复。我们可以为每个新对象添加一个竖线。

这个方法适用于任何对象,不仅仅是鸭子。我们可以想象一个包含宇宙中所有对象类别的列表,并为每个类别单独组成的集合建立类似上面的对应表。

我们可以像之前一样为每个集合分配竖线,根据它们的基数。这样,我们就可以使用特定的竖线串来表示所有与该串相关联的集合,无论其中包含的对象是什么。换句话说,我们可以将集合的竖线串理解为表示所有与该特定竖线串关联的集合的符号。

2.5. 位置数字系统

使用单一符号重复表示数字的系统称为“一进制”(unary)系统。前面讨论的系统就属于这一类。

请注意,该系统是非位置的。如果我们交换竖线串中的任意两个竖线,实际上表示的数字不会改变

但今天大多数数字系统是位置的,也就是说,写数字的顺序会影响其表示的数值。

这是为了避免写大量符号,我们可以使用某些符号及其位置来表示其他符号的重复。我们下面要研究的所有数字系统都属于位置系统,这意味着写符号的顺序对它们的含义至关重要。

3. 十进制系统

最常用的数字系统是十进制系统,也就是我们日常生活中使用的系统。十进制系统包含十个符号,也就是我们熟悉的十个数字:

✅ 常见做法是将第一个符号(0)视为表示空集的符号,尽管这是一个相对较新的观念。

十进制系统的符号集合为:

\{0,1,2,3,4,5,6,7,8,9\}

我们可以说十进制系统是“以10为底”的系统。我们可以使用下标 ₁₀ 来表示一个数是以十进制表示的。例如,数字 42 可以写成 42₁₀,或在上下文明确时直接写成 42

由于这是最常用的系统,我们将以它为参照来学习其他系统。

4. 十的替代进制有哪些?

4.1. 二进制系统

二进制系统是与计算机最密切相关的数字系统。它使用两个数字来表示任何数,通常是 0 和 1:

\{0,1\}

✅ 因为它只使用两个符号,所以我们称它为“以2为底”的系统。

这两个数字可以分别表示:

  • 布尔逻辑中的“真”或“假”
  • 电开关的“开”或“关”
  • 有限状态机中的任意两种状态

二进制系统中,每个数字位有特殊名称:bit(比特),在计算机中常用来表示二进制信息。

4.2. 转换为二进制

一个数字可以表示为一个有序的比特序列。我们可以将十进制数转换为二进制数,方法是反复减去从大到小排列的2的幂次方

例如,将十进制数 42₁₀ 转换为二进制:

  1. 最大的能放进 42 的 2 的幂是 2⁵ = 32,余下 10
  2. 最大的能放进 10 的 2 的幂是 2³ = 8,余下 2
  3. 最大的能放进 2 的 2 的幂是 2¹ = 2,余下 0

然后我们列出所有 2 的幂(从最大到最小),并写出对应的系数:

42_{10} = 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 0 \times 2^0

对应的二进制数就是这些系数按降序排列的结果:

42₁₀ = 101010₂

⚠️ 注意:我们在纸上写二进制数时,通常从右到左依次为低位到高位。但在计算机内存中,写入顺序可能因“大小端”而异。

4.3. 八进制系统

八进制系统是以 8 为底的数字系统。它的数字对应于十进制的前 8 个数字:

\{0,1,2,3,4,5,6,7\}

这个系统曾用于东亚的占星术,也在18世纪瑞典用于战争用途,还用于数字计算器控制LED显示。

✅ 八进制在计算幂和对数时有一些优势。例如:

  • 2³₁₀ = 10₈
  • 2⁴₁₀ = 20₈
  • 2⁵₁₀ = 40₈
  • 2⁶₁₀ = 100₈
  • 2⁷₁₀ = 200₈
  • 2⁸₁₀ = 400₈

十六进制也有类似特性,因此八进制的使用受到一定限制。

4.4. 十六进制系统

十六进制系统使用 16 个符号来表示数字。由于人类语言中的数字只有 10 个,通常我们会在 0-9 的基础上加上 A-F 六个字母:

✅ 十六进制符号集合为:

\{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F\}

十六进制可用于浮点运算,也可用于表示 ASCII 字符串,还广泛用于表示 RGB 颜色。

✅ 颜色表示时,通常以 # 开头,后跟三个十六进制数,每个表示一个颜色通道(红、绿、蓝),范围从 00FF

  • 纯红:#FF0000
  • 纯绿:#00FF00
  • 纯蓝:#0000FF
  • Baeldung 浅绿:#63B175
  • Baeldung 浅蓝:#6692E3

⚠️ 注意:每个颜色通道用两个十六进制数字表示,总共六个字符。

5. 总结

在本文中,我们学习了数字系统的基本概念。

我们从一进制(非位置)系统讲起,接着是十进制系统。

作为十进制的替代方案,我们研究了二进制、八进制和十六进制系统,它们在计算机科学中有着广泛的应用。

✅ 理解这些数字系统对于理解底层数据表示、网络协议、图像处理等非常重要。如果你是开发者,掌握它们将有助于你在调试、性能优化、协议解析等方面更加得心应手。


原始标题:Alternatives of Ten – Binary, Octal, Hexadecimal