數制:也稱爲“計數制”,是用一組固定的符號和統一的規則來表示數值的方法。任何一個數制都包含兩個基本要素:基數和位權。
基本概念:
數碼:數制中表示基本數值大小的不同數字符號。例如:十進制中有10個數碼:0、1、2、3、4、5、6、7、8、9
基數:數制中所使用數碼的個數。例如:十進制使用的數碼個數爲 0-9 ,一共 10 個數碼,所以十進制的基數爲 10
位權:數制中每一固定位置對應的單位值(數制中某一位上的 1 所表示的數值的大小(所處位置的價值))。例如:對於十進制中數字 123,1 的位權是 100,2 的位權是 10,3 的位權是 1,對於 N進制數,整數部分第 i 位的位權爲 N^(i-1) ,而小數部分第 j 位的位權爲 N^-j。
十進制:逢 10 進 1
數碼:0、1、2、3、4、5、6、7、8、9
基數:10
位權:對於 10.23 來說,1 的位權爲 10 (10^1),0 的位權爲 1 (10^0),2 的位權爲 0.1 (10^-1),3 的位權爲 0.01 (10^-2)
二進制:逢 2 進 1
數碼:0、1
基數:2
位權:對於 10.11 來說,從左向右看,1 的位權 2 (2^1), 0 的位權 1 (2^0),1 的位權 0.5 (2^-1),1 的位權 0.25 (2^-2)
十六進制:逢 16 進 1
數碼:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E
基數:16
位權:我這裏就不囉嗦了,跟上面的類似,其中重點說明一下,A 表示的是數值爲 10,B 爲11,C 爲12,D 爲13,E 爲 14
解釋了這麼多的概念有啥用呢?
對於十進制數字 123 來說,它的數值大小可以表示爲:1 * 100 + 2 * 10 + 3 * 1 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0
那麼有人會問了,如果是小數呢?
對於十進制數字 0.25 來說,它的數值大小可以表示爲:2 * 0.1 + 5 * 0.01 = 2 * 10^-1 + 5 * 10^-2 = 1 / (2 * 10^1 + 5 * 10^0)
通過上述表示,我們可以得到一個結論,一個數的實際數值 =(各個位置上的數值 * 對應位置的位權)之和
是不是很神奇呀? 那麼我們知道了十進制的表示方法,對於二進制我們怎麼處理是不是也很清楚了呢?
對於二進制數字 110 來說,它的數值大小可以表示爲:1 * 4 + 1 * 2 + 0 * 1 = 1 * 2^2 + 1 * 2^1 + 0 * 2^0
那麼知道了這些有啥用呢?我們可以做進制轉換呀!!!
二進制轉換爲十進制
1100.11 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 + 1 * 2^-1 + 1 * 2^-2 = 8 + 4 + 0.5 + 0.25 = 12.75
十進制轉換爲二進制
100.25
先轉整數部分
100 = 1 * 2^6 + 1 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 1100100(2)
再轉小數部分
0.25 = 0 * 2^-1 + 1 * 2^-2 = 0.01(2)
所以 100.25 = 1100100.01(2)
這個是如何計算的呢?
100 % 2 = 0 100 / 2 = 50 50 % 2 = 0
50 / 2 = 25 25 % 2 = 1 25 / 2 = 12
12 % 2 = 0 12 / 2 = 6 6 % 2 = 0
6 / 2 = 3 3 % 2 = 1 3 / 2 = 1
1 % 2 = 1 1 / 2 = 0(結束)
所以 100 = 1100100(就是通過 % 運算後的結果,倒着書寫下來)
0.25 * 2 = 0.5 0.5 % 2 = 0 0.5 * 2 = 1 1 % 2 = 1(結束)
所以 0.25 = 0.01(通過 % 運算後的結果,正着書寫下來)
至於這個原理大家就應該很清楚是怎麼一回事了?
解釋一下:
100 = 1 * 2^6 + 1 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0
% 2 得到的是最後一個 0 * 2^0 項的係數 0
再用 100 / 2 就相當於降冪操作,將上述的表達式每個都進行降冪,就是 2^6 變爲 2^5,然後再反覆利用 % 運算和 / 運算就能得到每項的係數,然後把係數對應倒着寫出來就得到了對應的二進制
0.25 = 0 * 2^-1 + 1 * 2^-2
* 2 進行升冪操作,此時 2^-1 變爲 2^0,再進行 % 運算,得到 0 * 2^-1 項的係數 0,反覆利用 * 運算 和 % 運算就能得到每項的係數,然後把係數對應正着寫出來就得到了對應的二進制
二進制轉八進制
111 010(2) = 72(8) 後右向左每三位構成一個八進制數
八進制轉二進制
72(8) = 111 010(2) 從左向右每三位拆解成對應的二進制數
二進制轉十六進制、十六進制轉二進制是每四位進行轉換
八進制轉十六進制通過先八進制轉二進制,再二進制轉十六進制
任意進制轉換,可以先轉十進制,再通過十進制再轉換!!!
感謝大家的瀏覽,如果有什麼不清楚的地方可以在下方評論,我看到會一一作出回覆,嘻嘻(*^_^*)