跳转到内容

维基少年:事物如何运作/二进制数

来自维基教科书,开放世界中的开放书籍

什么是二进制?

[编辑 | 编辑源代码]

大多数人使用十个不同的数字——0 到 9——来写数字。例如,数字 15、987630、100、99 和 6 都由这十个数字中的一个或多个组成。

这被称为十进制数制或十进制,这意味着这种数制有十个不同的数字来构成一个数字,与 (大多数) 人的手指数量一样多。

但计算机的构建并非基于十进制数制。这是因为计算机是用电子电路构建的,每个部分都可以处于开或关状态。由于只有两个选项,它们只能表示两个不同的数字01。这被称为二进制数制或二进制。("Bi" 表示二。) 所有数字都是用两个数字01 构成的。二进制中的一个数字 (即 0 或 1) 也被称为——它是进制数的简称。

计算机使用这种数制进行加、减、乘、除以及其他所有数学和数据操作。它们甚至以位的形式保存数据。

一个位本身只能表示零或一,因此要表示更大的数字 (甚至表示字母),它们将位组合在一起形成块。八个位构成一个字节,计算机使用它们需要的字节数来存储我们所需的信息。现代计算机有数百亿字节的存储空间。

这本书将教你如何理解二进制,为什么计算机使用它以及它们如何使用它。

为什么我们使用二进制?

[编辑 | 编辑源代码]

在正常的数学运算中,我们不使用二进制。我们被教导使用我们通常的数制。二进制在数学运算中比普通数字容易得多,因为你只需要使用两个数字符号——1 和 0,而不是十个数字符号——0、1、2、3、4、5、6、7、8 和 9。

计算机使用二进制是因为它们只能读取和存储开或关的电荷。因此,使用 0 表示“关”、1 表示“开”,我们可以在电线中使用数字。想象一下,如果每种数学符号 (0 到 9) 都有一种颜色,那么你就会有十种颜色。要记住这么多颜色非常困难,但你已经做到了。如果你只限于黑白两种颜色,你将只有两种颜色。记住它们会容易得多,但你需要想出一种新的数字记录方式。二进制就是如此——一种新的记录和使用数字的方式。

二进制表示法

[编辑 | 编辑源代码]

在学校里,你被教导了我们有 ones、tens 和 hundreds 列,等等。每列的值都是其右侧列值的十倍。这意味着如果第一列的值为 1,则第二列的值为 10,第三列的值为 100,依此类推。要找到某列中一个数字的值,你将数字乘以该列的值。如果你以前从未见过列的模型,它看起来像这样

十进制列 10,000 1000 100 10 1
数字 5 4 9 3 6
5 × 10,000 4 × 1000 9 × 100 3 × 10 6 × 1

所以十进制数字 54,936 等于 5×10000 + 4×1000 + 9×100 + 3×10 + 6×1。

二进制也有列,但每列的值都是其右侧列值的二倍。你仍然以相同的方式确定数字的值,将位的 (0 或 1) 值乘以其列数字的值 (128、64、32 等等),如下所示

二进制列 128 64 32 16 8 4 2 1
1 0 1 1 0 1 0 1
1 × 128 0 × 64 1 × 32 1 × 16 0 × 8 1 × 4 0 × 2 1 × 1

所以二进制数字 10110101 = (1×128) + (1×32) + (1×16) + (1×4) + (1×1) = 181 (十进制)。

编写二进制数

[编辑 | 编辑源代码]

上述方法使我们能够读取二进制数字,但我们如何编写它们呢?一种方法是编写从一开始的所有数字的列表,并向上工作。就像在十进制中将 1 加到 9 会进位到 10 一样,1 + 99 会进位到 100,在二进制中,当你将 1 加到 1 时,你会将 1 进位到左侧的下一个位置。按照此表格的步骤,了解它是如何工作的。

十进制 二进制
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
16 10000

你会注意到,二进制中的值 1、2、4、8 和 16 只有一个 1 位和一些 0 位。如果你回到二进制列,你可能会注意到每个值都有一个对应的列。如果你在列中写下数字,你只需要在与你正在编写的数字具有相同值的列中写下 1 即可。所有其他列都将是零。十进制的工作方式相同!当你编写一个与十进制列之一具有相同值的十进制数字 (例如 100) 时,你只需要在与你正在编写的数字相等的列中写下 1。你将在其他列中放置 0。

十进制版本 二进制
1 1
2 10
4 100
8 1000
16 10000

你是否在编写二进制数字时发现了一种模式?再次研究 1 到 16 的表格,直到你明白为什么在二进制中,

"1 + 1 = 10""1 + 100 = 101"

以你自己的方式。

你可能在读取十进制数字方面有很多练习,但在读取二进制数字方面还没有任何练习,因此读取二进制数字感觉很慢是正常的。

编写较大的数字
[编辑 | 编辑源代码]

如果你想编写一个更大的数字 (例如 86),该怎么办?你可以使用上面显示的列表方法,但这将花费很长时间!一种更快捷的方法涉及使用列

  1. 找到值最大但仍然小于或等于你正在编写的数字的列,并在该列中写下 1。对于 86,你将在 sixty-fours 列中写下 1,因为 64 小于 86,但左侧的下一列 (128) 大于 86。
  2. 查看你上一步中使用的列右侧的下一列。如果你可以将该列的值加到前一列的值,并将得到一个小于或等于你正在转换为二进制的数字,那么就在那里写下 1。如果不是,则写下 0。在 86 的示例中,你使用的第一列的值 (64) 加上右侧下一列的值 (32) 等于 96。96 大于 86,因此你将在 thirty-twos 列中写下 0。
  3. 找到你最后写下的列右侧的下一列。如果将该列的值加到所有具有 1 的列的值之和,将得到一个小于或等于你的数字,那么就在该列中写下 1。如果不是,则写下 0。对于 86,下一列将是 sixteens 列。16 加上所有之前具有 1 的列的值之和 (在本例中为 64) 等于 80。80 小于 86,因此你将在 sixteens 列中写下 1。
  4. 重复步骤 3,直到所有具有 1 的列的值之和等于你试图找到的数字。一旦发生这种情况,用零填充任何剩余的列。

下表显示了 86 的完整过程

二进制列 128 64 32 16 8 4 2 1
此数字可以容纳吗? 否。总计将为 128,并且 128>86。 是。总计将为 64,并且 64<86。 否。总计将为 96,并且 96>86。 是。总计将为 80,并且 80<86。 否。总计将为 88,并且 88>86 是。总计将为 84,并且 84<86。 是。总计将为 86。 否。总计将为 87,并且 87>86。
可以在此处放置 0,或者可以留空。 1 0 1 0 1 1 0
总计 0 64 64 80 80 84 86 86

转换为十进制

[编辑 | 编辑源代码]

52 的二进制数是 110100。如何读取二进制数呢?

  1. 从个位数开始看。由于它包含 0,所以不需要加任何东西到总和中。
  2. 然后查看十位数。没有,所以我们继续下一列。
  3. 百位数包含 1,所以我们把 4 加到总和中(总和为 4)。
  4. 跳过千位数,因为它是 0,我们遇到万位数,它包含 1。我们将 16 加到总和中(总和为 20)。
  5. 最后,十万位数包含 1。我们把它加到总和中(总和为 52)。

完成了!我们现在得到总和为 52。读取二进制数的基本方法是,如果某位数包含 1,就把该位的数值加到总和中。你不需要像十进制那样乘以权值来获得总和(例如十进制中的 5 在十位数上的权值为 10),因为唯一的数字是 0(记住,0 乘以任何数都等于 0)和 1(记住,1 乘以任何数都等于另一个数)。不需要乘法可以帮助你更快地读取二进制数。让我们在表格中查看 110100。

二进制位 位值 二进制位的数值
0 1 0
0 2 0
1 4 4
0 8 0
1 16 16
1 32 32
总计 52

现在让我们看另一个数。

寻找一个未知数

[编辑 | 编辑源代码]

二进制数是 1011,但我们不知道它代表什么。让我们通过逐位读取的方法找出这个数。

  1. 个位数包含 1,所以我们将 1 x 1 加到总和中(总和为 1)。
  2. 十位数包含 1,所以我们将 1 x 2 加到总和中(总和为 3)。
  3. 百位数包含 0,所以我们将 0 x 4 加到总和中(总和仍然为 3)。
  4. 千位数包含 1,所以我们将 1 x 8 加到总和中(总和为 11)。

我们完成了,所以总和就是答案。答案是 11!这里有一些你可以练习的数字。

1

101=

2

1111=

3

10001=

4

10100=

5

101000=

存储文本

[编辑 | 编辑源代码]

计算机以二进制形式存储所有内容,包括文本。为此,每个字母,每个标点符号,事实上是人们用过的大量符号,都在一个叫做 Unicode 的系统中被赋予了自己的数字。

例如,如果你的名字是“George”,那么计算机可以通过存储“G”的数字,然后是“e”,等等来以二进制形式存储它。美式英语中最常用的符号,比如没有重音的字母,可以用一个字节存储。其他符号,比如“£”和“¿”,需要多个字节,因为它们被赋予了更大的数字。以下是一些例子

  • G 被存储为 71,其二进制形式是 "0100 0111"
  • e 被存储为一百零一,其二进制形式是 "0110 0101"。

整个单词“George”看起来像

0100 0111 0110 0101 0110 1111 0111 0010 0110 0111 0110 0101

虽然这可能看起来像乱码,看看你是否能找到剩下的字母以及它们对应的十进制表示!

华夏公益教科书