計算機組成原理筆記——數制(Number Systems)

十進制系統

十進制系統即The Decimal Systemgit

在平常生活中,咱們天天都在使用逢十進一的數位(0、一、二、三、四、五、六、七、八、9)來表示數字,這種數制叫作十進制。
考察數字83的意義,能夠表示成:
83 = (8 × 10) + 3
即八個10再加上一個3;
考察數字4728的意義,能夠表示成:
4728 = (4 × 1000) + (7 × 100) + (2 × 10) + 8
即四個1000加上七個100再加上兩個10再加上一個8。算法

從上得知,咱們能夠說,十進制的基數(base/radix)爲10。也即,十進制數是由每一個數位的數字乘以10的n次冪,n與數位的位置相關。例如:
83 = (8 × 101) + (3 × 100)
83是由兩個數位構成,最左邊的數位爲最高(有效)數位,這裏是8;最右邊的數位是最低(有效)數位,這裏是3。最低數位的位置所對應的10的冪爲0,從右往左依次加一。即,數位3爲最低數位,故其10的冪爲0,表示爲3×100;往左移動一位,數位爲8,其10的冪爲1,表示爲8×101,將全部數位相加獲得的和即該十進制數,也即,8×101+ 3×100= 83
使用一樣的方法拆解數字4728,表示以下:
4728 = (4 × 103) + (7 × 102) + (2 × 101) + (8 × 02)spa

咱們使用一樣的方法表示小數部分,只不太小數部分數位的10的冪爲負數。其最大的數位的10的冪爲-1,從左向右其數位的10的冪依次減1。例如:
0.256 = (2 × 10-1) + (5 × 10-2) + (6 × 10-3)ci

在一個既有整數部分又有小數部分的十進制數中,其數位的10的冪也既有正數又有負數:
442.256 = (4 × 102) + (4 × 101) + (2 × 100) + (2 × 10-1) + (5 × 10-2) + (6 × 10-3)it

使用表格表示上述數字的數位位置和其10的冪的關係:io

4 7 2 2 5 6
百位 十位 個位 十分位 百分位 千分位
102 101 100 10-1 10-2 10-3
position 2 position 1 position 0 position -1 position -2 position -3

通常的,十進制數使用X來表示:
$$X = \{...d_2d_1d_0d_{-1}d_{-2}d_{-3}...\}$$
X的值爲:
$$X=\sum_{i}(d_i×10^i)$$table

按位計數系統

按位計數系統即Positional Number Systemsclass

十進制系統是按位計數系統的一種。
在一個按位計數系統中,每一個數字(Number)的數位(Digit)的位置使用i表示,數位的權用ri表示。其中,r爲數字的基數(base/radix)。循環

通常的,在該系統中,一個數字可表示爲:
$$(...a_3a_2a_1a_0a_{-1}a_{-2}a_{-3}...)_r$$
其中,每個數位ai都是一個整數,且0≤ai≤r二進制

該數字的值爲:

$$ ... + a_3r^3 + a_2r^2 + a_1r^1 + a_0r^0 + a_{-1}r^{-1} + a_{-2}r^{-2} + a_{-3}r^{-3} + ... = \sum_i(a_i × r^i) $$

二進制系統

二進制系統即The Binary System

在十進制系統中,每一個數位有十個數能夠表示,即0~9。在二進制系統中,每一個數位只有0或者1這兩個數來表示。
爲了不在表達過程當中引發的數制概念混亂,咱們給每一個數字加上數制下標。例如,十進制數83和4728,咱們使用8310和472810表示。

二進制數中的1和0在十進制中的意義相同:
02 = 010
12 = 110

若是要使用二進制數字表示十進制數字中更大的數字(>2),明顯的,在二進制中則須要進位了:

$$ 10_2 = (1 × 2^1) + (0 × 2^0) = 2_{10} \\ 11_2 = (1 × 2^1) + (1 × 2^0) = 3_{10} \\ 100_2 = (1 × 2^2) + (0 × 2^1) + (0 × 2^0) = 4_{10} $$

小數部分依然使用10的負次冪表示,這裏再也不舉例。
通常的,使用二進制表示數字:

$$ Y = \{...b_2b_1b_0b_{-1}b_{-2}b_{-3}...\} $$

Y的值爲:

$$ Y = \sum_i(b_i × 2^i) $$

二進制和十進制的轉換

將二進制數轉換爲十進制數很是容易,上述的筆記中已經有不少例子。

而要將十進制數字轉換爲二進制數字,整數部分和小數部分則須要分開處理。

整數部分

如上述筆記所敘,在二進制中,整數部分可表示爲:

$$ b_{m-1}b_{m-2}...b_2b_1b_0\quad(b_i=0或1) $$

該數字的值爲:

$$ (b_{m-1} × 2^{m-1}) + (b_{m-2} × 2^{m-2}) + ... + (b_1 × 2^1) + b_0 $$

假設咱們須要將十進制的整數N轉換爲二進制,能夠將N除以2,將獲得一個商N1和餘數R0,記爲:

$$ N = 2 × N_1 + R_0\quad(R_0=0或1) $$

接着,咱們將商N1繼續除以2。令其新的商記爲N2,新的餘數記爲R1,則:

$$ N_1 = 2 × N_2 + R_1\quad(R_1=0或1) $$

那麼有:

$$ N = 2(2N_2 + R_1) + R_0 = (N_2 × 2^2) + (R_1 × 2^1) + R_0 $$

咱們能夠將獲得的商繼續往下除以2,因爲N > N1 > N2...,最終會獲得商:Nm-1 = 1(010和110除外)以及餘數Rm-2 = 0或1,那麼咱們能夠獲得:

$$ N = (1 × 2^{m-1}) + (R_{m-2} × 2^{m-2}) + ... + (R_2 × 2^2) + (R_1 × 2^1) + R_0 $$

N的二進制形式。
所以,將十進制數的整數部分轉換爲二進制數,只需將數字不斷除以2便可,將獲得的餘數(非0即1)逆序排列,就獲得了二進制的整數部分。

例1:將1110轉換爲二進制。
解:
image

例2:將2110轉換爲二進制。
解:
image

小數部分

如上述筆記所敘,在二進制中,整數部分可表示爲:

$$ b_{-1}b_{-2}b_{-3}...\quad(b_i=0或1) $$

該數字的值爲:

$$ (b_{-1} × 2^{-1}) + (b_{-2} × 2^{-2}) + (b_{-3} × 2^{-3})... $$

也能夠記爲:

$$ 2_{-1} × (b_{-1} × 2^{-1} × (b_{-2} × 2^{-1} × (b_{-3} + ...)...)) $$

上一個表達式正好提供了一個轉換的思路。假設咱們要將數字F(0<F<1)由十進制轉換爲二進制。由上可知,數字F能夠表示爲:

$$ F = 2^{-1} × (b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...)) $$

等式兩邊同乘以2得:

$$ 2F = b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...) $$

因爲0<F<1,顯然的,2F的整數部分b-1∈{0, 1}。咱們將剩餘的小數部分記爲F1,且0<F1<1,可得:

$$ F_1 = 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...) $$

爲了求b-1,咱們可重複上述步驟。以此類推,小數部分的轉換算法即將小數不斷乘以2便可。算法中每一步的被乘數都是上一步的積的小數部分,且積的整數部分必定是0或1,其構成之正序序列即二進制的小數部分。然而,這個算法是不精確的,由於該算法的精確中止條件是直到積的小數部分等於0爲止,而有時該算法可能會一直循環下去。所以,咱們須要另外一箇中止條件:將算法運行到咱們所須要的必定精度便可。

例1:將0.8110轉換爲二進制。
解:
image

例2:將0.2510轉換爲二進制。
解:
image

相關文章
相關標籤/搜索