- 大學計算機基礎(chǔ)
- 蕭寶瑋
- 2066字
- 2019-11-15 10:06:55
1.3.3 常用數(shù)制及其轉(zhuǎn)換
在計算機中數(shù)據(jù)是以二進制來表示的,但在現(xiàn)實生活中多以十進制數(shù)來進行計算,而在使用計算機程序設(shè)計語言對計算機進行操作時,還經(jīng)常會用到八進制、十六進制。因此需要了解不同進制之間的關(guān)系。
1.數(shù)制
數(shù)制,也稱計數(shù)制,是用一組固定數(shù)字和一些統(tǒng)一規(guī)則來表示數(shù)據(jù)的方法,一般可分為非進位計數(shù)制和進位計數(shù)制。
(1)非進位計數(shù)制
非進位計數(shù)制是指表示數(shù)值大小的數(shù)碼與它在數(shù)中所處的位置無關(guān)。例如在羅馬數(shù)字中,Ⅰ表示1,Ⅱ表示2,Ⅴ表示5,Ⅵ表示6。若按進位計數(shù)制的規(guī)則,Ⅱ應(yīng)該表示11,Ⅵ應(yīng)該表示51。
(2)進位計數(shù)制
進位計數(shù)制是指按指定進位方式計數(shù)的數(shù)制,即表示數(shù)值大小的數(shù)碼與它在數(shù)中所處的位置有關(guān)。常見的有二進制、八進制、十進制和十六進制。
進位計數(shù)制包含三個要素。
?數(shù)碼:一組用來表示某種數(shù)制的符號。例如,十進制的數(shù)碼是0、1、2、3、4、5、6、7、8、9;二進制的數(shù)碼是0、1。
?基數(shù):某數(shù)制可以使用的數(shù)碼個數(shù)。例如,十進制的基數(shù)是10;二進制的基數(shù)是2。
?位權(quán):表示數(shù)碼在不同位置代表的值的大小。例如,在十進制中個位的權(quán)值是1,十位的權(quán)值是10。
二進制的基數(shù)是2,使用兩個數(shù)碼:0、1,逢二進一。
八進制的基數(shù)是8,使用八個數(shù)碼:0、1、2、3、4、5、6、7,逢八進一。
十進制的基數(shù)是10,使用十個數(shù)碼:0、1、2、3、4、5、6、7、8、9,逢十進一。
十六進制的基數(shù)是16,使用十六個數(shù)碼:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十六進一。
為了區(qū)分不同進制的數(shù),可以用數(shù)字下標標注,也可以加后綴表示,B表示二進制,O表示八進制,D表示十進制,H表示十六進制。例如:(1011)2、1011D分別表示二進制數(shù)和十進制數(shù)。
任何一種進位計數(shù)制的數(shù)都可以表示成按位權(quán)表示的多項式,例如:
(1011.11)2=1×23+0×22+1×21+1×20+1×2-1+1×2-2
(456.14)8=4×82+5×81+6×80+1×8-1+4×8-2
2.數(shù)制間的轉(zhuǎn)換
(1)二進制轉(zhuǎn)十進制
將二進制數(shù)按位權(quán)形式展開,然后按十進制的運算法則求和便可得到對應(yīng)的十進制數(shù)。例如:
(1011.11)2=1×23+0×22+1×21+1×20+1×2-1+1×2-2=(11.75)10
(2)十進制轉(zhuǎn)二進制
將十進制的整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換,然后將結(jié)果相加。
①整數(shù)部分的轉(zhuǎn)換規(guī)則是“除二取余”。例如,將25D轉(zhuǎn)換為二進制的過程如圖1-5所示。將25除以2,記下余數(shù),所得的商繼續(xù)除以2,直到商為零為止。注意最先除得的余數(shù)是低位。將所得余數(shù)序列按由高位到低位的順序排列便可得到對應(yīng)的二進制數(shù)。

圖1-5 十進制整數(shù)轉(zhuǎn)二進制
即25D=11001B
②小數(shù)部分的轉(zhuǎn)換規(guī)則是“乘二取整”。例如,將0.3125D轉(zhuǎn)換為二進制的過程如圖1-6所示。將0.3125乘以2,記下整數(shù),余數(shù)部分繼續(xù)乘以2,直到所要求的精度為止。將得到的整數(shù)序列由高位到低位排列便得到對應(yīng)的小數(shù)部分。

圖1-6 十進制小數(shù)轉(zhuǎn)二進制
即0.3125D=0.0101B
(3)二進制數(shù)和八進制數(shù)之間的轉(zhuǎn)換
三位二進制數(shù)對應(yīng)一位八進制數(shù)。二進制數(shù)轉(zhuǎn)八進制數(shù)時,將二進制數(shù)每三位分一組,整數(shù)部分從右向左分,最后一組不足三位時左邊補零;小數(shù)部分從左向右分,最后一組不足三位時右邊補零。將每組對應(yīng)的八進制數(shù)寫出來即可。例如:
10101110.0111→010.101.110.011.100→256.34
即(10101110.0111)2=(256.34)8
八進制數(shù)轉(zhuǎn)二進制數(shù)時,將每位八進制數(shù)對應(yīng)的三位二進制數(shù)寫出來即可。例如:
125.1→001.010.101.001→1010101.001
即(125.1)8=(1010101.001)2
在八進制數(shù)轉(zhuǎn)換為二進制數(shù)時注意一定要寫夠三位,比如上例中的2要轉(zhuǎn)換為010而不是10,小數(shù)部分的1要轉(zhuǎn)換為001而不是100。
(4)二進制數(shù)和十六進制數(shù)之間的轉(zhuǎn)換
四位二進制數(shù)對應(yīng)一位十六進制數(shù)。二進制數(shù)轉(zhuǎn)十六進制數(shù)時,將二進制數(shù)每四位分一組,整數(shù)部分從右向左分,最后一組不足四位時左邊補零;小數(shù)部分從左向右分,最后一組不足四位時右邊補零。將每組對應(yīng)的十六進制數(shù)寫出來即可。例如:
10101110.0111→10101110.0111→AE.7
即(10101110.0111)2=(AE.7)16
十六進制數(shù)轉(zhuǎn)二進制數(shù)時,將每位十六進制數(shù)對應(yīng)的四位二進制數(shù)寫出來即可。例如:
92F.C→1001.0010.1111.1100→100100101111.11
即(92F.C)16=(100100101111.11)2
常用的各進制數(shù)間的對照表如表1-1所示。
表1-1 常用進制數(shù)對照表

(5)其他進制之間的轉(zhuǎn)換
十進制轉(zhuǎn)八進制、十六進制可以用“除八取余”“除十六取余”的方法,也可以先轉(zhuǎn)換為二進制,再轉(zhuǎn)換為八進制、十六進制。其他進制轉(zhuǎn)十進制可以用按權(quán)值展開的辦法。
小游戲——猜姓
有五張寫有姓氏的卡片如圖1-7所示,你的姓在哪幾張上有,我便知道你姓什么。

圖1-7 姓氏卡片
下面我們看看其中有什么奧秘。首先把它抽象成數(shù)字,如圖1-8所示,然后觀察這些數(shù)字的排放有什么規(guī)律。

圖1-8 數(shù)字卡片
實際上這些數(shù)字的安排是由對應(yīng)的二進制數(shù)得到的。例如,1對應(yīng)的二進制數(shù)為1,所以只有第1張上有;2對應(yīng)的二進制數(shù)為10,所以只有第2張上有(低位對應(yīng)左面的卡片,高位對應(yīng)右面的卡片);3對應(yīng)的二進制數(shù)為11,所以在第1張、第2張上有。又比如12對應(yīng)的二進制數(shù)為1100,所以12只出現(xiàn)在第3張、第4張上;31對應(yīng)的二進制數(shù)為11111,所以每張卡片上都有。
這是卡片的制作原理。在玩的過程中就不必做進制轉(zhuǎn)換了,只要記住每張卡片左上角的數(shù)字即可。比如對方說第1、3、5張上有,你便快速地將第1、3、5張左上角的1、4、16三個數(shù)相加,告訴對方所猜的數(shù)是21。如果熟練了,閉上眼睛都能說出來。若要猜姓氏,需要更多的練習。
- Learning Cython Programming
- OpenShift開發(fā)指南(原書第2版)
- Flink SQL與DataStream入門、進階與實戰(zhàn)
- JavaFX Essentials
- Three.js開發(fā)指南:基于WebGL和HTML5在網(wǎng)頁上渲染3D圖形和動畫(原書第3版)
- 從0到1:HTML+CSS快速上手
- Getting Started with Eclipse Juno
- 匯編語言編程基礎(chǔ):基于LoongArch
- 軟件工程基礎(chǔ)與實訓(xùn)教程
- Extending Unity with Editor Scripting
- Elasticsearch Blueprints
- Joomla!Search Engine Optimization
- Java程序設(shè)計
- 從零開始學UI設(shè)計·基礎(chǔ)篇
- Java程序設(shè)計(項目教學版)