數制:也稱為「計數制」,是用一組固定的符號和統一的規則來表示數值的方法。任何乙個數制都包含兩個基本要素:基數和位權。
基本概念:
數碼:數制中表示基本數值大小的不同數字符號。例如:十進位制中有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) 從左向右每三位拆解成對應的二進位制數
二進位制轉十六進製制、十六進製制轉二進位制是每四位進行轉換
八進位制轉十六進製制通過先八進位制轉二進位制,再二進位制轉十六進製制
任意進製轉換,可以先轉十進位制,再通過十進位制再轉換!!!
進製計數制及其轉換
資料是對客觀事物的符號表示。資訊是各種事物變化和特徵的反映,是事物之間相互作用的表徵。資料處理之後產生的結果為資訊。計算機內部使用二進位制表示各種資訊。計算機中資料的最小單位是位,儲存容量的基本單位是位元組。8個二進位制位稱為1個位元組,此外還有kb,mb,gb,tb。位 bit 位是度量資料的最小...
strtol及數制轉換
函式及其引數 long int strtol const char nptr,char endptr,int base 編輯本段 函式的解釋說明 這個函式會將引數nptr字串根據引數base來轉換成長整型數。引數base範圍從2至36,或0。參 數base代表採的進製方式,如base值為10則採用1...
牛客網 數制轉換 任意進製)
題目描述 求任意兩個不同進製非負整數的轉換 2進製 16進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b,f 或者 0,1,9,a,b,f 輸入描述 輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進製整數,b表示欲將a進製整數n轉換成b進製整數。a,...