維基少年:事物如何運作/二進位制數
大多數人使用十個不同的數字——0 到 9——來寫數字。例如,數字 15、987630、100、99 和 6 都由這十個數字中的一個或多個組成。
這被稱為十進位制數制或十進位制,這意味著這種數制有十個不同的數字來構成一個數字,與 (大多數) 人的手指數量一樣多。
但計算機的構建並非基於十進位制數制。這是因為計算機是用電子電路構建的,每個部分都可以處於開或關狀態。由於只有兩個選項,它們只能表示兩個不同的數字,0 和 1。這被稱為二進位制數制或二進位制。("Bi" 表示二。) 所有數字都是用兩個數字0 和 1 構成的。二進位制中的一個數字 (即 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。對於 86,你將在 sixty-fours 列中寫下 1,因為 64 小於 86,但左側的下一列 (128) 大於 86。
- 檢視你上一步中使用的列右側的下一列。如果你可以將該列的值加到前一列的值,並將得到一個小於或等於你正在轉換為二進位制的數字,那麼就在那裡寫下 1。如果不是,則寫下 0。在 86 的示例中,你使用的第一列的值 (64) 加上右側下一列的值 (32) 等於 96。96 大於 86,因此你將在 thirty-twos 列中寫下 0。
- 找到你最後寫下的列右側的下一列。如果將該列的值加到所有具有 1 的列的值之和,將得到一個小於或等於你的數字,那麼就在該列中寫下 1。如果不是,則寫下 0。對於 86,下一列將是 sixteens 列。16 加上所有之前具有 1 的列的值之和 (在本例中為 64) 等於 80。80 小於 86,因此你將在 sixteens 列中寫下 1。
- 重複步驟 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。如何讀取二進位制數呢?
- 從個位數開始看。由於它包含 0,所以不需要加任何東西到總和中。
- 然後檢視十位數。沒有,所以我們繼續下一列。
- 百位數包含 1,所以我們把 4 加到總和中(總和為 4)。
- 跳過千位數,因為它是 0,我們遇到萬位數,它包含 1。我們將 16 加到總和中(總和為 20)。
- 最後,十萬位數包含 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 x 1 加到總和中(總和為 1)。
- 十位數包含 1,所以我們將 1 x 2 加到總和中(總和為 3)。
- 百位數包含 0,所以我們將 0 x 4 加到總和中(總和仍然為 3)。
- 千位數包含 1,所以我們將 1 x 8 加到總和中(總和為 11)。
我們完成了,所以總和就是答案。答案是 11!這裡有一些你可以練習的數字。
計算機以二進位制形式儲存所有內容,包括文字。為此,每個字母,每個標點符號,事實上是人們用過的大量符號,都在一個叫做 Unicode 的系統中被賦予了自己的數字。
例如,如果你的名字是“George”,那麼計算機可以透過儲存“G”的數字,然後是“e”,等等來以二進位制形式儲存它。美式英語中最常用的符號,比如沒有重音的字母,可以用一個位元組儲存。其他符號,比如“£”和“¿”,需要多個位元組,因為它們被賦予了更大的數字。以下是一些例子
整個單詞“George”看起來像
0100 0111 0110 0101 0110 1111 0111 0010 0110 0111 0110 0101
雖然這可能看起來像亂碼,看看你是否能找到剩下的字母以及它們對應的十進位制表示!