跳轉到內容

維基少年:事物如何運作/二進位制數

來自華夏公益教科書

什麼是二進位制?

[編輯 | 編輯原始碼]

大多數人使用十個不同的數字——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

雖然這可能看起來像亂碼,看看你是否能找到剩下的字母以及它們對應的十進位制表示!

華夏公益教科書