數(shù)值與數(shù)制,進(jìn)制轉(zhuǎn)換
一、數(shù)值與數(shù)制
數(shù)值就是數(shù)據(jù)的真值,怎么來(lái)記錄某個(gè)數(shù)的值呢?就引出了數(shù)制的概念,也稱計(jì)數(shù)制,根據(jù)計(jì)數(shù)規(guī)則和特點(diǎn)的不同,分為進(jìn)位計(jì)數(shù)制和非進(jìn)位計(jì)數(shù)制。
1)?????? 非進(jìn)位計(jì)數(shù)制:表示數(shù)值大小的數(shù)碼與它在數(shù)中的位置無(wú)關(guān)或不采用進(jìn)位原則的計(jì)數(shù)體制。?
代表:羅馬數(shù)字。(該計(jì)數(shù)制與計(jì)算機(jī)組成沒(méi)直接關(guān)系,這里不討論了,感興趣可自行查閱)
2)?????? 進(jìn)位計(jì)數(shù)制:表示數(shù)值大小的數(shù)碼與它在數(shù)中的位置有關(guān),采用進(jìn)位原則的計(jì)數(shù)體制。
代表:日常生活中的十進(jìn)制,中國(guó)古人的天干、地支計(jì)年發(fā),時(shí)間的60進(jìn)制、12進(jìn)制、24進(jìn)制等等。
計(jì)算機(jī):二進(jìn)制,16進(jìn)制和8進(jìn)制是二進(jìn)制的助記方式,看了后面的進(jìn)制轉(zhuǎn)換就理解這一點(diǎn)了。
所以在計(jì)算機(jī)世界里,一定要熟悉二進(jìn)制?。。?!
我們這里不是講數(shù)學(xué),其他的任意進(jìn)制就不提了,這里只介紹計(jì)算機(jī)里用的最多的十進(jìn)制、二進(jìn)制、十六進(jìn)制(八進(jìn)制在計(jì)算機(jī)里用的也不多(例如Linux文件系統(tǒng)中文件的訪問(wèn)權(quán)限每一位對(duì)應(yīng)一種rwx,3位二進(jìn)制正好對(duì)應(yīng)一位八進(jìn)制,轉(zhuǎn)換方式類似十六進(jìn)制,可以用后面介紹的直接替換法),后面就不單獨(dú)介紹了。
在進(jìn)位計(jì)數(shù)制中有重要的兩個(gè)概念:基數(shù)和位權(quán)。
1)?????? 基數(shù):表示某進(jìn)位制所具有的數(shù)字符號(hào)的個(gè)數(shù)。
例如:????十進(jìn)制的基數(shù):0~9(10個(gè)符號(hào));
????????? ? ? ?二進(jìn)制的基數(shù):0~1(2個(gè)符號(hào));
????????????? ?十六進(jìn)制的基數(shù):數(shù)字0~9,字母A~F(16個(gè)符號(hào));
十進(jìn)制與二進(jìn)制和十六進(jìn)制之間的對(duì)應(yīng)關(guān)系如下表:

所謂進(jìn)位計(jì)數(shù)制,從表里也能看出來(lái),就是逢幾進(jìn)一,十進(jìn)制是逢十進(jìn)一,二進(jìn)制是逢二進(jìn)一,十六進(jìn)制是逢十六進(jìn)一。
2)?????? 位權(quán)(簡(jiǎn)稱權(quán)):表示某進(jìn)位制的數(shù)中不同位置上數(shù)字的權(quán)重(基數(shù)^位權(quán))。
例如:十進(jìn)制數(shù)135.79,1的權(quán)重就是10^2,3的權(quán)重就是10^1,5的權(quán)重就是10^0,7的權(quán)重就是10^-1,9的權(quán)重就是10^-2;
二進(jìn)制數(shù)101.1,從左到右1的權(quán)重分別是2^2、2^0 、2^-1;
十六進(jìn)制數(shù)A7.C,A(相當(dāng)于十進(jìn)制的10)的權(quán)重就是16^1;7的權(quán)重就是16^0,C(相當(dāng)于十進(jìn)制的12)的權(quán)重就是16^-1;
有了基數(shù)和權(quán)的概念,進(jìn)制計(jì)數(shù)的兩種表示方式之間的關(guān)系就一目了然了:
1)?????? 并列表示法:
如十進(jìn)制數(shù)(4562)10、二進(jìn)制數(shù)(01101111)2、十六進(jìn)制數(shù)(A7BF)16, 也常用B代表二進(jìn)制,H代表16進(jìn)制(或前綴加0x),D代表十進(jìn)制(沒(méi)標(biāo)注,默認(rèn)是10進(jìn)制)。
2)?????? 多項(xiàng)式表示法:
如M進(jìn)制數(shù)(N)M=dn-1(M)n-1十dn-2(M)n-2十…十d1(M)1十d0(M)0十d-1(M)-1十 d-2(M)-2十…十d-m(M)-m=

等號(hào)左邊是它的并列表示法,右邊是它的多項(xiàng)式表示法。
人類世界是十進(jìn)制的,計(jì)算機(jī)是二進(jìn)制的,我們要熟悉計(jì)算機(jī)里的數(shù)據(jù)表示形式,就要熟練掌握十進(jìn)制與二進(jìn)制之間的相互轉(zhuǎn)換。
二、進(jìn)制轉(zhuǎn)換
1)任意進(jìn)制轉(zhuǎn)換為十進(jìn)制(當(dāng)然包括二進(jìn)制和十六進(jìn)制轉(zhuǎn)換為十進(jìn)制)的方法:
任意進(jìn)制數(shù)按它自己的基數(shù)加權(quán)以十進(jìn)制展開(kāi)后,進(jìn)行的十進(jìn)制運(yùn)算得到的結(jié)果就是它對(duì)應(yīng)的十進(jìn)制數(shù)制表示。
例如:二進(jìn)制數(shù)1101.101轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制數(shù),
(1101.101)2 =(1×2^3十1×2^2十0×2^1十1×2^0十1×2^-1十0×2^-2+1×2^-3)10
=(8+4十1十0.5+0.125)10 =(13.625)10
十六進(jìn)制數(shù)1101.101轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制數(shù),
(BD8.4)16 =(11×16^2十13×16^1十8×16^0十4×16^-1)10 =(2816十208十8十0.25)10 =(3032.25)10
?
2)?????? 將十進(jìn)制轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制
A.?? 基數(shù)乘除法:基數(shù)乘/除法分為基數(shù)乘法和基數(shù)除法兩種,整數(shù)部分用除法,小數(shù)部分用乘法。
例如:(25.6875)10 =(?)2,(687.3)10=(?)16
整數(shù)部分除以2或16取余數(shù),除到商為零為止,將每次得到的余數(shù),按照小數(shù)點(diǎn)在頭頂的順序排列,什么意思呢?過(guò)程如下:
(25)10 =(11001)2
??

?(678)10 =(2AF)16
? ? ??

小數(shù)部分乘以2或16取整數(shù),乘到小數(shù)部分為零為止(有些時(shí)候達(dá)不到,只能取近似值,例如十進(jìn)制0.32以二進(jìn)制表示只能取近似),將每次得到的整數(shù),按照小數(shù)點(diǎn)在頭頂的順序排列,過(guò)程如下:

綜上:(25.6875)10 =(11001.1011)2,(687.3)10=(2AF.4CC……)16
B.??? 降冪法
適合數(shù)值較小的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),因?yàn)椋?/span>
2^10 = 1024, 2^9 = 512, 2^8 = 256, 2^7 = 128, 2^6 = 64, ……
可將十進(jìn)制數(shù)直接拆分成2的整數(shù)次冪求和式,從而得到對(duì)應(yīng)的二進(jìn)制數(shù),例如:
(1234)10 = 1024 + 128 + 64 + 16+ 2 =2^10 + 2^7 + 2^6 + 2^4+ 2^1=(10011010010)2
3)???????? 二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換---直接替換法
一位十六進(jìn)制數(shù)對(duì)應(yīng)4位二進(jìn)制數(shù):
十六進(jìn)制0? ?? 1? ? ? 2????? 3???? 4???? ?5? ? ? 6???? 7???? 8??? ?9???? A??? B? ? ? C???? D???? E???? F
二進(jìn)制0000? 0001? 0010? 0011? 0100? 0101? 0110?? 0111? 1000? l001? 1010? 1011? 1100? 1101? 1110? 1111
例如:將二進(jìn)制數(shù)1010110110.110111轉(zhuǎn)換為十六進(jìn)制數(shù)。

注意補(bǔ)零的位置:首尾補(bǔ)零。
所以??????? (1010110110.110111)2=(2B6.DC)16
??? 例2.4? 將十六進(jìn)制數(shù)5D.6E轉(zhuǎn)換為二進(jìn)制數(shù)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

所以? (5D.6E)16=(1011101.0110111)2
最后要把首尾的零去掉。
本文只介紹計(jì)算機(jī)中常用的進(jìn)制間轉(zhuǎn)換方法,任意進(jìn)制間轉(zhuǎn)換(屬于數(shù)學(xué)問(wèn)題)的其他方法感興趣的可自行查閱。
本文介紹的轉(zhuǎn)化方法都是有數(shù)學(xué)證明的,本文只介紹怎么用,對(duì)原因感興趣的可自行查閱。
?