1. 程式人生 > >進位制(二進位制,十進位制,十六進位制等)的理解

進位制(二進位制,十進位制,十六進位制等)的理解

      進位制也就是進位制,是人們規定的一種進位方法。 對於任何一種進位制---X進位制,就表示某一位置上的數運算時是逢X進一位。 十進位制是逢十進一,十六進位制是逢十六進一,二進位制就是逢二進一

      數制是人們利用符號進行計數的科學方法。數制有很多種,在計算機中常用的數制有:十進位制,二進位制和十六進位制。

  數制也稱計數制,是指用一組固定的符號和統一的規則來表示數值的方法。計算機是資訊處理的工具,任何資訊必須轉換成二進位制形式資料後才能由計算機進行處理,儲存傳輸

十進位制數(Decimal)  

      人們通常使用的是十進位制。它的特點有兩個:有0,1,2….9十個基本數字組成,十進位制數運算是按“逢十進一”的規則進行的.

  在計算機中,除了十進位制數外,經常使用的數制還有二進位制數和十六進位制數.在運算中它們分別遵循的是逢二進一和逢十六進一的法則.

二進位制數(Binary)

  二進位制數有兩個特點:它由兩個基本數字0,1組成,二進位制數運算規律是逢二進一。

  為區別於其它進位制數,二進位制數的書寫通常在數的右下方註上基數2,或加後面加B表示。

  例如:二進位制數10110011可以寫成(10110011)2,或寫成10110011B,對於十進位制數可以不加註.計算機中的資料均採用二進位制數表示,這是因為二進位制數具有以下特點:

  1) 二進位制數中只有兩個字元0和1,表示具有兩個不同穩定狀態的元器件。例如,電路中有,無電流,有電流用1表示,無電流用0表示。類似的還比如電路中電壓的高,低,電晶體的導通和截止等。

  2) 二進位制數運算簡單,大大簡化了計算中運算部件的結構。

  二進位制數的加法和乘法運算如下:

  0+0=0 0+1=1+0=1 1+1=10

  0×0=0 0×1=1 1×0=0 1×1=1

八進位制數(Octal)  

由於二進位制資料的基R較小,所以二進位制資料的書寫和閱讀不方便,為此,在小型機中引入了八進位制。八進位制的基R=8=2^3,有數碼0、1、2、3、4、5、6、7,並且每個數碼正好對應三位二進位制數,所以八進位制能很好地反映二進位制。八進位制用下標8或資料後面加O表示 例如:二進位制資料 ( 11 101 010 . 010 110 100 )2 對應 八進位制資料 ( 3 5 2 . 2 6 4 )8或352.264O.

十六進位制數(Hex)

  由於二進位制數在使用中位數太長,不容易記憶,所以又提出了十六進位制數

  十六進位制數有兩個基本特點:它由十六個字元0~9以及A,B,C,D,E,F組成(它們分別表示十進位制數10~15),十六進位制數運算規律是逢十六進一,即基R=16=2^4,通常在表示時用尾部標誌H或下標16以示區別。

  例如:十六進位制數4AC8可寫成(4AC8)16,或寫成4AC8H。

數的位權概念  對於形式化的進製表示,我們可以從0開始,對數字的各個數位進行編號,即個位起往左依次為編號0,1,2,……;對稱的,從小數點後的數位則是-1,-2,……

  進行進位制轉換時,我們不妨設源進位制(轉換前所用進位制)的基為R1,目標進位制(轉換後所用進位制)的基為R2,原數值的表示按數位為AnA(n-1)……A2A1A0.A-1A-2……,R1在R2中的表示為R,則有(AnA(n-1)……A2A1A0.A-1A-2……)R1=(An*R^n+A(n-1)*R^(n-1)+……+A2*R^2+A1*R^1+A0*R^0+A-1*R^(-1)+A-2*R^(-2))R2

  (由於此處不可選擇字型,說明如下:An,A2,A-1等符號中,n,2,-1等均應改為下標,而上標的冪次均用^作為字首)

  舉例:

  一個十進位制數110,其中百位上的1表示1個10^2,既100,十位的1表示1個10^1,即10,個位的0表示0個100,即0。

  一個二進位制數110,其中高位的1表示1個2^2,即4,低位的1表示1個2^1,即2,最低位的0表示0個2^0,即0。

  一個十六進位制數110,其中高位的1表示1個16^2,即256,低位的1表示1個16^1,即16,最低位的0表示0個16^0,即0。

  可見,在數制中,各位數字所表示值的大小不僅與該數字本身的大小有關,還與該數字所在的位置有關,我們稱這關係為數的位權

  十進位制數的位權是以10為底的冪,二進位制數的位權是以2為底的冪,十六進位制數的位權是以16為底的冪。數位由高向低,以降冪的方式排列。

編輯本段 進數制之間的轉換

  1.二進位制數、十六進位制數轉換為十進位制數(按權求和)

  二進位制數、十六進位制數轉換為十進位制數的規律是相同的。把二進位制數(或十六進位制數)按位權形式展開多項式和的形式,求其最後的和,就是其對應的十進位制數——簡稱“按權求和”.

  例如:把(1001.01)2 二進位制計算。

  解:(1001.01)2

  =8*1+4*0+2*0+1*1+0*(1/2)+1*(1/4)

  =8+0+0+1+0+0.25

  =9.25

  把(38A.11)16轉換為十進位制數

  解:(38A.11)16

  =3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方

  =768+128+10+0.0625+0.0039

  =906.0664

  2.十進位制數轉換為二進位制數,十六進位制數(除2/16取餘法)

  整數轉換.一個十進位制整數轉換為二進位制整數通常採用除二取餘法,即用2連續除十進位制數,直到商為0,逆序排列餘數即可得到――簡稱除二取餘法.

  例:將25轉換為二進位制數

  解:25÷2=12 餘數1

  12÷2=6 餘數0

  6÷2=3 餘數0

  3÷2=1 餘數1

  1÷2=0 餘數1

  所以25=(11001)2

  同理,把十進位制數轉換為十六進位制數時,將基數2轉換成16就可以了.

  例:將25轉換為十六進位制數

  解:25÷16=1 餘數9

  1÷16=0 餘數1

  所以25=(19)16

  3.二進位制數與十六進位制數之間的轉換

  由於4位二進位制數恰好有16個組合狀態,即1位十六進位制數與4位二進位制數是一一對應的.所以,十六進位制數與二進位制數的轉換是十分簡單的.

  (1)十六進位制數轉換成二進位制數,只要將每一位十六進位制數用對應的4位二進位制數替代即可――簡稱位分四位.

  例:將(4AF8B)16轉換為二進位制數.

  解: 4 A F 8 B

  0100 1010 1111 1000 1011

  所以(4AF8B)16=(1001010111110001011)2

  (2)二進位制數轉換為十六進位制數,分別向左,向右每四位一組,依次寫出每組4位二進位制數所對應的十六進位制數――簡稱四位合一位.

  例:將二進位制數(000111010110)2轉換為十六進位制數.

  解: 0001 1101 0110

  1 D 6

  所以(111010110)2=(1D6)16

  轉換時注意最後一組不足4位時必須加0補齊4位

編輯本段 數制轉換的一般化

  1)R進位制轉換成十進位制

  任意R進位制資料按權展開、相加即可得十進位制資料。 例如:N = 1101.0101B = 1*2^3+1*2^2+0*21+1*2^0+0*2^-1+1*2^-2+0*2^-3+1*2^-4 = 8+4+0+1+0+0.25+0+0.0625 = 13.3125

  N = 5A.8H = 5*16^1+A*16^0+8*16^-1 = 80+10+0.5 = 90.5

  2)十進位制轉換R 進位制

  十進位制數轉換成R 進位制數,須將整數部分和小數部分分別轉換.

  1.整數轉換----除R 取餘法 規則:(1)用R 去除給出的十進位制數的整數部分,取其餘數作為轉換後的R 進位制資料的整數部分最低位數字; (2)再用R去除所得的商,取其餘數作為轉換後的R 進位制資料的高一位數字; (3)重複執行(2)操作,一直到商為0結束。 例如: 115 轉換成 Binary資料和Hexadecimal資料 (圖2-4) 所以 115 = 1110011 B = 73 H

  2.小數轉換-----乘R 取整法 規則:(1)用R 去除給出的十進位制數的小數部分,取乘積的整數部分作為轉換後R 進位制小數點後第一位數字; (2)再用R 去乘上一步乘積的小數部分,然後取新乘積的整數部分作為轉換後R 進位制小數的低一位數字; (3)重複(2)操作,一直到乘積為0,或已得到要求精度數位為止。

編輯本段 進位制的and、or、xor運算

  所有進位制的and(和)、or(或)、xor(異或)運算都要轉化為二進位制進行運算,然後對齊位數,進行運算,具體的運算方法和普通的and、or、xor相同,如:1and1=1,1and0=0,0and0=0,1or1=1,1or0=1,0or0=0,1xor1=1,1xor0=0,0xor0=1。就是一般的二進位制運算。

  如:35(H)and5(O)=110101(B)and101(B)=101(B)=5(O)