十進制系統即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轉換爲二進制。
解:
例2:將2110轉換爲二進制。
解:
如上述筆記所敘,在二進制中,整數部分可表示爲:
$$ 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轉換爲二進制。
解:
例2:將0.2510轉換爲二進制。
解: