二進制、八進制、十進制、十六進制的互相轉換

在編程工做種,咱們時常須要對不一樣的進制的數進行轉換,以方便咱們的工做、閱讀和理解。在計算機領域,主要設計二進制、八進制、十進制和十六進制,下面咱們就來說講這四種機制的整數相互轉換方法。程序員

1、查表法編程

就是咱們製做一張包含各類進制的值一 一對應數值表,須要時查表就得,可是,咱們知道,這不太現實,由於數是無窮的,咱們不可能作一張無窮的表。在次可是,這也不是說查表法就不用了,其實咱們一直在使用,你可能會說,沒有,沒見過,不對,有的,就在你的腦海裏,我相信絕大部分程序員都有,好比,問你,(15)10對應的十六進制是多少,你確定張口就答(F)16,爲何你能很快答出,是由於咱們在平常工做和學習中,無形在腦海裏創建了這張表。只是這張表頗有限,更大的數你就不能一口答了,因此須要其餘的轉換方法,可是其餘方法會用到查表法。學習

咱們至少要創建起以下的一張表spa

2、短除法設計

短除法運算方法是先用一個除數除以能被它除盡的一個質數,以此類推,除到商是質數爲止。具體在咱們的進制換算裏,當一個M進制數轉N進制數時,就是用這個數除N取餘,逆序排列。具體作法是:將N做爲除數,用M進制整數除以N,能夠獲得一個商和餘數;保留餘數,用商繼續除以N,又獲得一個新的商和餘數;仍然保留餘數,用商繼續除以N,還會獲得一個新的商和餘數;如此反覆進行,每次都保留餘數,用商接着除以N,直到商爲0時爲止blog

下面舉例:二進制

  • 十進制轉二進制、八進制、十六進制
    (10)10--->(x)2                                                       
          
    結果爲(10)10--->(1010)2                       
    (100)10--->(x)8  

    結果爲(100)10--->(144)8 。
    (100)10--->(x)16

    結果爲(100)10--->(64)16
  • 八進制轉二進制、十進制、十六進制
    (27)8--->(x)2

    結果爲(27)8--->(10111)2

    (27)8--->(x)10
    首先查表得   (10)10<===>(12)8
    有以下算式

    結果爲(27)8--->(23)10
    (756)8--->(x)16
    首先查表得   (16)10<===>(20)8
                       (E)16<===>(16)8
    有以下算式

     結果,(756)8--->(1EE)16程序

    二進制轉其餘進制和十六進制轉其餘進制我就不一一舉例了,經過上面的例子,咱們能夠看到用短除法咱們是能夠進行任意進制的相互轉換的,同時咱們也能夠發現,將高進制向低進制(只限於這幾種進制,咱們姑且認爲高低順序爲:二進制<八進制<十進制<十六進制)轉換時,要先有一步進制基數的查表換算過程,在加上咱們人對2、8、十六進制的四則運算不熟悉,因此這三種進制進行短除法換算比較困難。因爲十進制的基數自己就是十六進制的數碼,同時表明的量意義也同樣,因此總的來講,短除法特別適合十進制向2、8、十六進制的轉換。

3、位權相加法方法

咱們知道,任何進制的數都是由:位、數碼、位權等要素構成,這也爲咱們進制間的轉換提供了一種方法:位權相加法。假設當前數字是N進制,那麼:對於整數,從右往左看,第i位的位權等於Ni-1。更加通俗的理解是,假設一個多位數(由多個數字組成的數)某位上的數字是1,那麼它所表示的數值大小就是該位的位權。當咱們由M進制轉爲N進制時要進行這樣的運算:a*Ni-1+aNi-2+...+a*N1+a*N0im

下面舉例:

  • 二進制轉十進制
    轉換公式:a*2i-1+a*2i-2+...+a*21+a*20
    (11001)2=1*24+1*23+0*22+0*21+1*20=(16+8+0+0+1)10=(25)10
  • 八進制轉十進制
    轉換公式:a*8i-1+a*8i-2+...+a*81+a*80
    (145)8=1*82+4*81+5*80=(64+32+5)10=(101)10
  • 十六進制轉十進制
    轉換公式:a*16i-1+a*16i-2+...+a*161+a*160
    (145)16=1*162+4*161+5*160=(256+64+5)10=(325)10
  • 二進制轉八進制
    因爲兩個進制的基數存在着這樣的關係 8=23,也就是說3爲二進制數正好是一位八進制數。因此只能是從低到高,按3位一組編組,高位不夠3位補0,在編組內用二進制轉十進制的公式
    (11001)2=(011)2( 001)2=(0*22+1*21+1*20)(0*22+0*21+1*20)=(31)8
  • 二進制轉十六進制
    因爲兩個進制的基數存在着這樣的關係 8=24,也就是說4爲二進制數正好是一位十六進制數。因此只能是從低到高,按4位一組編組,高位不夠4位補0,在編組內用二進制轉十進制的公式
    (11001)2=(0001)16( 1001)16=(0*23+0*22++0*21+1*20)(1*23+0*22++0*21+1*20)=(19)16

咱們能夠看到,位權相加法特別適合2、8、十六進制轉十進制,對其它狀況則很困難,好比二進制轉8、十六進制時先用了合位法,特別是高進制轉低進制更是困難。

4、拆位拼接法

因爲二進制、八進制和十六進制的基數有着這樣的關係:8=23,16=24,也就十說一位八進制數等於3位二進制數,一位十六進制數等於4位二進制數,因此有以下轉換方法。

  • 八進制轉二進制
    一位八進制數經過查表拆成三位二進制,而後按八進制數的高低位組合起來便可。如:
    ( 2743)8---->(x)2
    先拆成:2  7  4  3,而後分別查表對應的二進制 010   111  100  011
    而後拼接,結果爲( 2743)8---->(010111100011)2

     

  • 十六進制轉二進制
    一位十六進制數經過查表拆成四位二進制,而後按十六進制數的高低位組合起來便可。如:
    ( A5D6)16---->(x)2
    先拆成:A  5  D  6,而後分別查表對應的二進制 1010   0101  1101  0110
    而後拼接,結果爲( A5D6)16---->(1010010111010110)2

     

5、借橋法

對某些困難的狀況,咱們能夠先轉位十進制或二進制,而後在轉爲對應的進制,我成爲借橋法,中間的進制就是橋。好比十六進制轉八進制,咱們能夠先用位權相加法轉爲十進制,在用短除法轉爲八進制。這就不舉例了。

6、總結

  • 短除法和位權相加法都能進行這四種進制的相互轉換,只是在某些狀況下較困難
  • 十進制轉2、8、十六進制時最好用短除法
  • 2、8、十六進制轉十進制時最好用位權相加法
  • 二進制轉8、十六進制最好用合位法和位權相加法
  • 8、十六進制二轉進制最好用拆位拼接法
  • 八進制和十六進制的互相轉換最好用用借橋法
相關文章
相關標籤/搜索