跳轉到內容

IB/第 4 組/計算機科學/計算機組織/資訊層

來自華夏公益教科書,一個開放的世界中的開放書籍

什麼是位置表示法 ?

[編輯 | 編輯原始碼]

數字使用 位置表示法 寫成。最右邊的數字表示其值乘以基數的零次方。左邊的下一個數字表示其值乘以基數的一次方。下一個數字表示其值乘以基數的二次方。下一個數字表示其值乘以基數的三次方,等等。即使不知道,人們通常也熟悉位置表示法。人們本能地傾向於使用這種方法來計算 943 中 1 的個數

定義定位記數法的一種更正式的方法是說,數值被表示為一個以數制基數為底的多項式。但什麼是多項式?多項式是由兩個或多個代數項的和構成,每個代數項由一個常數乘以一個或多個變數的非負整數冪組成。在定義定位記數法時,變數就是數制的基數。因此,943 可以表示為一個多項式,如下所示,其中 代表基數。

為了正式表達這個概念,一個以 為底的數制中的數字有 位數字,表示如下,其中 表示數字中第 位上的數字。

看起來很複雜嗎?讓我們以以 10 為底的 63578 為例。在這裡, 是 5(這個數字恰好有 5 位數字),而 是 10(基數)。這個公式說明,第五位數字(最左邊的數字)乘以基數的四次冪;第四位數字乘以基數的三次冪,以此類推。

在之前的計算中,我們假設基數為 10。這是一個合乎邏輯的假設,因為通用數制 *就是* 十進位制。然而,943 沒有理由不能表示以 13 為底的值。為了區分這些值,我們使用 的通用符號來表示以 為底的數字 。因此, 是十進位制系統中的一個數字。為了將 轉換為 ,我們只需使用之前的計算方法即可。

因此,13 進制中的 943 等於 10 進制中的 1576,或者 。必須記住,這兩個數字的值是等價的。也就是說,它們都代表著相同數量的“事物”。如果一個袋子裡裝了 顆豆子,另一個袋子裡裝了 顆豆子,那麼這兩個袋子裡裝的豆子數量完全相同。只是不同的數制允許人們用不同的方式來表示這個值。

請注意,在十進位制中,最右邊的數字是“個位”。在十三進制中,最右邊的數字也是“個位”。事實上,任何進位制都是如此,因為任何數的零次方都等於 1。

為什麼有人會想要用十三進製表示數值?誠然,這並不常見,但瞭解其工作原理有時會有所幫助。例如,一種叫做雜湊的計算技術會對數字進行混淆,而混淆數字的一種方法就是用不同的進位制來解釋它們。

其他的進位制,比如二進位制 (base 2),在計算機處理中尤為重要。熟悉 2 的冪進位制,比如八進位制 (base 8) 和十六進位制 (base 16),也是很有幫助的。


二進位制

[edit | edit source]

什麼是二進位制 ?

[edit | edit source]

二進位制這個詞指的是任何只有兩種可能值的編碼。在計算機科學中,它們指的是電子值 0 和 1(見下圖)。布林值是二進位制的。在計算機中,我們使用二進位制而不是十進位制系統,因為與十進位制系統相比,二進位制系統在電子裝置中進行計算的方式更簡單、更高效。這可以透過以下關於二進位制門的章節進行探討。

Image: 150 pixels
圖片:150 畫素

計算機將電壓解釋為二進位制。鑑於我們身處最大電壓為 5 伏特的系統中,如果電線中的輸入電流電壓在 0 伏特到 0.8 伏特之間,則電晶體會將輸入電流解釋為邏輯 0。另一方面,如果電壓在 2 伏特到 5 伏特之間,則電晶體將輸入訊號解釋為邏輯 1(右圖)。需要注意的是,有一個不可用的電壓區域,它不對應於邏輯 0 或 1。這個不可用的區域特別有用,因為電壓總是會略微波動,擁有這個灰色區域可以讓我們更好地區分彼此的電訊號(0 和 1)。類似地,從伏特到二進位制數字的電壓轉換也適用於電晶體的輸出訊號。¹

數制中的進位制指定了系統中使用的數字數量。這些數字總是從 0 開始,一直延續到比進位制少 1 的數字。例如,二進位制中有 2 個數字:0 和 1。八進位制中有 8 個數字:0 到 7。十進位制中有 10 個數字:0 到 9。進位制也決定了數字位置的含義。當對數制中的最後一個數字加 1 時,需要將進位到左邊的數字位置。

什麼是位元 ?

[edit | edit source]

一個位元是計算機可以處理和儲存資料的最小單位。它可以儲存 1 或 0,分別表示開/關、真/假、是/否。

什麼是位元組 ?

[edit | edit source]

1 個位元組是由 8 個位元組成的/儲存的。1 個位元組代表 28 個不同的值。

如何將十進位制數轉換為二進位制數 ?

[edit | edit source]

如果我們要將十進位制數轉換為二進位制數,我們也會使用之前的轉換表。

例如,讓我們將十進位制數 56 轉換為二進位制數。

  • 首先,我們找出可以完全容納在 56 中的最大的二進位制冪。這是 32 = 25。不是 64,因為 56 無法完全容納在 64 中。
  • 然後,我們求 56 - 32 的餘數,即 24。我們檢查可以完全容納在 24 中的最大的二進位制冪。這是 16 = 24
  • 然後我們取 24 - 16 的餘數,即 8。我們檢查哪個最大的二進位制冪可以完全放入 24 中。這是 8 = 23
  • 最後 8 - 8 = 0,所以我們已經到達了結尾。

現在我們將用於計算的二進位制冪標記為二進位制 1,並將其他冪標記為 0。我們得到 00111000

十進位制到二進位制轉換表
27 26 25 24 23 22 21 20
= 128 64 32 16 8 4 2 1
= 0 0 1 1 1 0 0 0


如何將二進位制數轉換為十進位制數?

[編輯 | 編輯原始碼]

要將二進位制數轉換為十進位制數,我們只需要將二進位制位中所有值為 1 的 2 的冪相加。

首先,我們必須計算二進位制數中的位數,並將其與 2 的冪關聯起來,從

對於二進位制中的每一位,我們必須將該數字乘以 2 的對應指數。例如

取二進位制數 1011。按照前面的位置數規則,我們得到以下表格

現在按照相同的邏輯,只是寫法不同,如果我們將以下位元組轉換為十進位制:10011100

二進位制到十進位制轉換表
1 0 0 1 1 1 0 0
= 27 26 25 24 23 22 21 20
= 128 64 32 16 8 4 2 1
= 128 16 8 4

我們只新增二進位制位等於 1 的列。

最後,我們將每個數字加起來,這就是從二進位制轉換的數字。

所以 10011100 = 128 + 16 + 8 + 4 = 156

在一個位元組中,我可以儲存多少個可能的數字?

[編輯 | 編輯原始碼]

一個位元組是 8 位,這意味著在一個位元組的資料中可以儲存的值的數量是 28 = 256。

在一個 n 位數字中,我可以儲存多少個可能的數字?

由於有 n 個可能的位,每個位可以取兩個可能的值(1 或 0),因此在一個 n 位數字中,我們可以儲存 個可能的數字。

在一個位元組中,這意味著我們可以儲存 28 = 256 個不同的數字。

在一個 n 位數字中,我可以得到的最大數字是多少?

由於有 n 個可能的位,每個位可以取兩個可能的值(1 或 0),因此我們可以獲得的最大數字是 2n -1。實際上,我們可以獲得的最小數字是 0,因此公式中減去 1。

在一個位元組中,這意味著我們可以獲得的最大數字是 28 -1 = 255,即 11111111,而最小數字是 0,即 0000000。

練習 - 數字的二進位制表示

[編輯 | 編輯原始碼]

1. 1001 的十進位制表示是什麼?

23 + 20 = 8 + 1 = 9

2. 01000101 的十進位制表示是什麼?

26 + 22+ 20 = 64 + 4 + 1 = 69

3. 42 的二進位制表示是什麼?

42 - 32 = 10,其中 32 = 25

10 - 8 = 2,其中 8 = 23

2 - 2 = 0,其中 2 = 21

因此,二進位制表示為:00101010

4. 129 的二進位制表示是什麼?

129 - 128 = 1,其中 128 = 27

1 - 1 = 0,其中 1 = 20因此,二進位制表示為:01000001

5. 我可以在 2 個位元組中表示多少個不同的整數?

2 個位元組是 16 位(2 x 8 位),因此 216 = 65536 個不同的數字可以在 2 個位元組中表示

6. 我可以在 2 個位元組中表示的最大數字是多少?

2 個位元組是 16 位(2 x 8 位),因此 216 -1 = 65535 是可以在 2 個位元組中表示的最大數字。

十六進位制

[編輯 | 編輯原始碼]

什麼是十六進位制?

[編輯 | 編輯原始碼]

在高於 10 的進制中,數字是如何表示的?在高於 10 的進制中,大於整數 9 的數字將用符號表示。所有數字都寫在以下轉換表中。

十進位制 十六進位制 二進位制
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

十六進位制是一個使用 16 個可能的數字的記數系統。它最主要的吸引力在於它能夠用比二進位制或十進位制系統更少的數字來表示非常大的數字。

如何將十進位制數轉換為十六進位制數?

[編輯 | 編輯原始碼]

方法如下

  • 對十進位制數字進行以 16 為底的向下取整除法。從左側開始寫下餘數。
  • 繼續對先前向下取整除法的結果進行以 16 為底的向下取整除法,直到得到 0。繼續寫下餘數。
  • 使用右側的表格將餘數從最後一位到第一位轉換為十六進位制。
  • 你得到了十六進位制數字!

例如,如果我們要將十進位制數 2545 轉換為十六進位制

  • 我們使用地板除法:2545 // 16 = 159,該除法的餘數為 2545 % 16 = 1
  • 我們對之前的結果使用地板除法:159 // 16 = 9,該除法的餘數為 159 % 16 = 15
  • 我們對之前的結果使用地板除法:9 // 16 = 0,該除法的餘數為 9 % 16 = 9。
  • 我們到達了 0,所以我們停止除法。
  • 我們轉換我們的餘數:9 → 9,15 → F,1 → 1
  • 所以我們的十六進位制數為:9F1


如何將十六進位制數轉換為十進位制數?

[編輯 | 編輯原始碼]

這種轉換比較簡單,因為我們可以使用位值法來轉換我們的數字。實際上,我們只需要將每個十六進位制數字乘以它相應的 16 的冪。

例如,如果我們想將十六進位制數 ABC 轉換為十進位制數,我們將 乘以 ,因為數字中有 12 個 1, 乘以 ,因為有 11 個十六,以及 乘以 ,因為有 10 個二百五十六。

如何將二進位制數轉換為十六進位制數?

[編輯 | 編輯原始碼]

要將二進位制數轉換為十六進位制數,首先要確保二進位制數的長度是 4 的倍數。如果不是,在數字前面新增 0,直到它是 4 的倍數。

接下來,將二進位制數分成 4 位一組。

然後,對於每組 4 位數字,將二進位制數轉換為一個單一數字,方法是將 4 位值中的每一位轉換為相應的 2 的冪。

(千位變成 8,百位變成 4,十位變成 2,個位變成 1。但是,如果一個地方的二進位制值為 0,則它保持為零。)

例如,二進位制值 1111 變成 8421,而 0101 變成 0401

然後,將這些數字加起來。8421 變成 8+4+2+1 = 15,而 0401 變成 4+1 = 5。

最後,將該值轉換為十六進位制。如果該值在 0 到 9 之間,它在十六進位制中保持該值。如果它大於或等於 10,它將更改為相應的字母:10 是 A,11 是 B,依此類推。

例如,如果我們想轉換二進位制數:1011111011

  • 我們的數字只有 10 位,所以在左側新增兩個 0:001011111011
  • 我們將我們的數字分成 4 位一組:0010 1111 1011
  • 我們將每組轉換為一個單一數字:0+0+2+0 = 2, 8+4+2+1 = 15, 8+0+2+1 = 11
  • 我們將單一數字轉換為十六進位制數字:2 → 2, 15 → F, 11 → B
  • 我們的十六進位制數字是 2FB

八進位制

[編輯 | 編輯原始碼]
注意

考試不需要



什麼是八進位制 ?

[編輯 | 編輯原始碼]
考試不需要

八進位制是一種以 8 為基數的記數系統,這意味著在這種記數法中只存在從 0 到 7 的數字。

例如,可以計算 754 在八進位制(基數 8)中的十進位制等價物 - 簡單地說,就是找到 . 如前所述,它是將數字擴充套件為其多項式形式並將其加起來的案例

表示文字

[編輯 | 編輯原始碼]

什麼是 ASCII?

[編輯 | 編輯原始碼]
原始的 7 位 ASCII 表(英文版)

ASCII 代表美國資訊交換標準程式碼。它是一種 7 位程式碼,後來改為 8 位程式碼,其目的是為字母和其他外來符號設定一個數字,從而允許在同一國家或使用同一種語言的計算機之間交換資訊。儲存在 ASCII 中的字母和符號的總數為 128 個。各國會輸入他們自己的字母和符號,而不是英文。

然而,有一個主要的缺點,那就是 ASCII 只能容納包含英文字母的符號,世界各地的計算機無法成功地相互交換資訊和資料。

這個缺點導致了更大的字母和符號資料庫 Unicode 的建立,它允許所有語言在 Unicode 中儲存它們的字母。

什麼是 Unicode ?

[編輯 | 編輯原始碼]

儘管 ASCII 曾經是行業標準很長時間,但它根本沒有足夠的字元和符號來覆蓋世界快速國際化。最初的解決方案是每個國家都有一個不同的組織系統,但是如果日本的人用日語字元給英國的人發郵件,那就會是一團亂麻。解決方案是 Unicode。Unicode 現在建立在 16-24 位系統上,而不是 ASCII 的 8 位系統,並且能夠覆蓋 149,813 個不同的字元,這足以覆蓋所有語言中存在的每個字元。

截至 2024 年,最新版本的 Unicode 中包含 161 個指令碼(覆蓋字母、子音字母和音節文字),儘管仍然有一些指令碼尚未編碼,特別是那些主要用於歷史、禮儀和學術環境的指令碼。此外,還對已經編碼的指令碼添加了字元,以及符號,特別是用於數學和音樂(以音符和節奏符號的形式)。

什麼是 UTF-8 ?

[編輯 | 編輯原始碼]

UTF-8 是一種在 Unicode 字元和二進位制文字之間進行翻譯的方法。這是透過將每個 Unicode 字元儲存為最多四個單位元組二進位制字串來實現的。每個二進位制字串都是透過將 Unicode 字元的程式碼點(形成索引的字母和數字)轉換為一組二進位制字串來建立的,其中每個字串代表程式碼點中的一個字元。

例如,字元“A”表示為“`U+0041`”(其中“41”是程式碼點),它被編碼為“`01000001`”(它在十六進位制中是 41)。

如何在文字中表示來自不同語言的字元?

[編輯 | 編輯原始碼]

表示來自不同語言的字元的最佳方法是使用 Unicode。ASCII 對不同語言來說很不方便,因為它專門為英文設計,不包含任何非英文字元。同時,Unicode 擁有漢語、日語和韓語字元,以及西裡爾字母和阿拉伯字母,以及來自各種語言的任何其他符號。

表示浮點數

[編輯 | 編輯原始碼]
注意

考試不需要


浮點數是如何表示/儲存的?

[編輯 | 編輯原始碼]
本節將更深入地探討內容。

浮點數通常用 4 個位元組表示。在這 32 個位元位中:1 個位元位用於表示數字的符號,8 個位元位用於表示指數,23 個位元位用於表示數字的小數部分。這是一種用科學記數法儲存數字的方式。

float example

用數學術語來說,它是透過 ±A* 計算的。符號由藍色區域表示,A 由紅色區域表示,B 由綠色區域表示。

有趣的是,如果我們要表示負數和正數(整數或小數),我們需要使用一個位元位來儲存符號。如果我們只儲存正數,就不需要保留符號位。

聲音的表示

[edit | edit source]
注意

考試不需要


聲音是如何表示/儲存的?

[edit | edit source]

在用麥克風錄製聲音後,麥克風會將聲波轉換為數字訊號,計算機使用一種叫做取樣的技術。計算機透過以固定的時間間隔對聲音訊號的振幅進行測量來對聲音進行取樣,通常為 44.1 kHz(或每秒 44,100 次),然後將這些測量結果以二進位制格式儲存為數字。

mp3 檔案格式是如何儲存和表示聲音的?

[edit | edit source]

影像的表示

[edit | edit source]

顏色是如何表示/儲存的?

[edit | edit source]

我們今天在電腦螢幕上看到的顏色是由 24 個位元位的二進位制數表示的。


我們知道,所有顏色都源於三種原色:紅、藍、綠。根據我們混合這三種顏色的比例,我們可以得到許多不同的顏色。因此,計算機只分析這三種原色以及它們在混合時使用了多少。這個系統被稱為 RGB 表示法。

在總共 24 個位元位中,我們將它們分成 3 組,每組 8 個位元位,分別代表三種原色:藍色、綠色和紅色。


讓我們先舉個紅色的例子。在紅色中,對應的 RGB 值為:R - 255(我們可以使用的最大顏色量),G - 0(不使用此顏色),B - 0(不使用此顏色)。

因此,在 8 個位元位中,十進位制數 255 可以轉換為 8 個位元位的二進位制數,在本例中為 11111111。因此,紅色的 24 位二進位制數將為 111111110000000000000000。這種情況適用於綠色(000000001111111100000000)和藍色(000000000000000011111111)。


總結一下,步驟如下:

- 將 24 個位元位分成 3 組,每組 8 個位元位,分別代表紅色、綠色和藍色。

- 找到顏色在十進位制中的 RGB 表示法。

- 將十進位制的 RGB 值轉換為二進位制。

- 將 3 組 8 個位元位組合起來,我們就得到了顏色的最終二進位制表示法。


通常,24 個位元位足以描繪逼真的顏色(照片級逼真)。但是,為了表現更逼真的顏色,可以使用更多的位元位,例如 32 個位元位或 48 個位元位。

什麼是畫素?

[edit | edit source]

.png 檔案格式是如何儲存和表示影像的?

[edit | edit source]

.jpeg 檔案格式是如何儲存和表示影像的?

[edit | edit source]

練習

[edit | edit source]

將十六進位制數 F12 轉換為十進位制和二進位制。

答案

十進位制:3858

二進位制:111100010010


將十進位制數 123 轉換為十六進位制和二進位制。

答案

十六進位制:7B

二進位制:1111011


將十六進位制數 F0A 轉換為十進位制。

答案

3850

華夏公益教科書