2.1數制與編碼
一、進位計數制及其相互轉換
1、進位計數法
進位計數法是一種計數的方法。常見的進位計數法有十進制數、二進制數、十六進制數、八進制數等。十進制數是人們在日常生活中最常使用的,而在計算機中通常使用二進制數、八進制數和石榴進制數。
在進位計數法中,每個數位所用到的不同數碼的個數稱為基數。十進制的基數為10(0-9),每個數位計滿10就向高位進位,即“逢十進一”。
十進制數101,其個位的1顯然與百位的1所表示的數值是不一樣的。每個數碼所表示的數值等於該數碼本身乘以一個與它所在數位有關的常數,這個常數稱為位權。一個進位數的數值大小就是它的各位數碼按權相加。
一個r進制()的數值可表示為
式中,r是基數,ri是第i位的位權(整數位最低位規定為第0位);Ki的取值可以使0,1,…,r-1共r個數碼中的任意一個。
(1)二進制數
計算機中用的最多的是基數為2的計數制,即二進制。二進制只有0和1兩種數字符號,計數“逢二進一”。它的任意數位的權為2i,i為所在位數。
(2)八進制數
八進制作為二進制的一種書寫形式,其基數為8,有0~7共8個不同的數字符號,基數“逢八進一”。因為r=8=23,所以只要把二進制中的3位數碼編為一組就是以為八進制數,兩者之間的轉換極為方便。
(3)十六進制數
十六進制也是二進制的一種書寫形式,其基數為16,“逢十六進一”。每個數位可取0~9、A、B、C、D、E、F中的任意一個,其中A、B、C、D、E、F分別表示10~15,因為r=16=24
2、不同進制數之間的相互轉換
(1)二進制轉換成八進制和十六進制
對於一個二進制混合數(既包含整數部分,又包含小數部分),在轉換時應以小數點為界。其整數部分,從小數點開始往左數,將一串二進制分為3位(八進制)一組或4位(十六進制)一組,在數的最左邊可根據需要加“0”補齊;對於小數部分,從小數點開始往右數,也將一串二進制分為3位一組或4位一組,在數的最右邊也可根據需要加“0”補齊。最終使總的位數成為3或者4的整數倍,然後分別用對應的八進制或者十六進制數取代。
如,將二進制數1111000010.01101分別轉成八進制數和十六進制數。
1 7 0 2 .
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
001 111 000 010 分界點 011 010 0011 1100 0010 分界點 0110 1000
↑ ↑ ↑ ↑
高位補0,湊足3位 低位補0,湊足3位 高位補0,湊足4位 低位補0,湊足4位
所以,對應的八進制數為(1702.32)8=(1111000010.01101)2, 對應的十六進制為(3C2.68)16=(111000010.01101)2
同樣,由八進制轉換成二進制只需要將每一位改為3位或者4位二進制即可(必要時去掉整數最高位或者小數最低位的0)。
八進制和十六進制之間的轉換先轉化成二進制。
(2)任意進制轉換成十進制
將任意進制的數各位數碼與它們的權重相乘,再把乘積相加,就得到了一個十進制數。這種方法稱為按權展開相加法。
如,(11011.1)2=1×24+1×23+0×22+1×21+1×20+1×2-1=27.5
(3)十進制轉換成任意進制
一個十進制數轉換成任意進制數,常采用基數乘除法。這種轉換方法對十進制數的整數部分和小數部分將分別進行處理,對於整數部分采用除基取余法;對於小數部分采用乘基取整法,最後將整數部分和小數部分的轉換結果拼接起來。
除基取余法(整數部分的轉換):整數部分除基取余,最先取得的余數為數的最低位,最後取得的余數為數的最高位(即除基取余,先余為低,後余為高),商為0時結束。
如,將123.6875轉換成二進制數
整數部分
所以,整數部分 123=(1111011)2
乘基取整法(小數部分的轉換):小數部分乘基取整,最先得到的整數為數的最高位,最後取得的整數為數的最低位(即乘基取整。先整為高,後整為低),乘積為0(或滿足精度要求)時結束。
小數部分
所以小數部分為0.678=(0.1011)2
2、真值和機器數
在日常生活中,通常用正、負號來分別表示正數(正號可省略)、負數,如+15、-8等。這種帶“+”或“-”符號的數稱為真值。真值是機器數所代表的實際值。
在計算機中,通常采用數的符號和數值一起編碼的方法來表示數據。常用的有=原碼、補碼和放碼表示法。這幾種表示法都將數據的符號數字化。通常采用“0”表示“正”,用“1”表示“負”,如0,101(這裏的都好“,”實際上並不存在,僅為區分符號位與數值位)表示+5。這種把符號“數字化”的數稱為機器數。
3、BCD碼
二進制編碼的十進制數(BCD)通常采用4位二進制來表示一位十進制數中的0~9這10個數碼。
(1)8421碼(最常用)
它是一種有權碼,設其各位的數值位b3、b2、b1、b0,則權值從高到底依次為8、4、2、1,則它表示的數為D=8b3+4b2+2b1+1b0,如8→1000;9→1001
(2)余3碼
(3)2421碼
2.1數制與編碼