进制转换

这里简要提一下2进制、8进制、十进制、十六进制的互转

 

起源:

  计算机信息使用电子元件保存,电子元件状态只有开闭两种,通过不同的开闭组合来保存信息,也就是我们的二进制的原型。

  生活中的信息往往不只有两个状态,因此需要多个电子元件组合,我们将8个电子元件信息作为最小的存储单位,1byte=8bit。1mb=1024byte;  1gb=1024mb; 1tb=1024gb。 这也就是计算机的基本存储单位的概述。

 

衍生:

  二进制对于开闭的描述使用10来表示,1代表开,0代表b。如十进制10即可表示为二进制110。为了区别于其他进制,二进制我们通常使用单位0b或者0B开头

 

  二进制对于较大的数据存储描述的字符过长,如10表示为ob110,100表示为ob1100100,那如果10000呢?

    对于数据的暴增,为了节约描述字符,我们将3个二进制合为一组作为10进制,用1个字符表示,如 1 100 100 表现为:144.   这也就是8进制的由来。8进制通常用单位0开头

    同样的,随着数据暴增,8进制表示数据也有些过长,我们将4个长度二进制合为一组作为10进制,用1个字符来表示,如110 0100 表示成为 64。4个长度二进制表示的数据为0~15,对于10~15用阿拉伯数字0~9无法描述,因此对于10~15我们使用英文字符a-f或A-F来表示。这也就是十六进制的由来。十六进制通常用0x或者0X开头。

 

 

   进制的互转:

  其他进制转10进制:

    二进制:

      ob 1100100 = 0*2^0 + 0*2^1+ 1* 2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 1*2^6

            = 0 + 0 + 4 +0 + 0 + 32 + 64 

            = 100

    八进制:

      0 144 = 4*8^0 + 4*8^1 + 1*8^2

        = 4 +  4*8 + 1*64 

        = 100

    十六进制:

      0x 64 = 4* 16^0 + 6*16^1

         = 4*1 + 6*16

         = 100 

    

    其他进制转换为十进制十分简单,只需要将数据从右往左每一位作为底数,乘以进制对应位置的次方,然后将值累加即可。这里我们衍生出几个单位用来描述我们的这种方法:

    位权展开法:

      

       0x 64 = 4* 16^0 + 6*16^1

         = 4*1 + 6*16

         = 100 

      这里

        0x 64=>6*? +  4 * ?

        ?

          指的是该位置的位权值,位权值= 进制^位置序号次方,位置序号从右往左一次为0 1 2 3 ... 

      也就是说其他数转十进制:

        = ... 系数3 * 对应位权值 + 系数2*对应位权值 + 系数1*对应位权值

        = ...系数3 * 进制^位置序号 + 系数2*进制^位置序号 + 系数1*进制^位置序号

        如0x 64 =  6 * ? + 4* ?

             = 6 * 16^1 + 4* 16^0 = 100 

     

  十进制转其他进制:

      十进制转其他进制原理也就是位权展开法,将十进制数依次得到每一个位置的系数,然后附加单位且连接即可。

      100 转2进制:

        2  100  0

        2  50    0

        2  25    1

        2  12 0

        2  6   0

        2  3      1

        2  1      1

            0      

        

      依次除以进制,得到的余数即是该位置的系数,一直到被除数为0即可,将所有系数连接起来,附上单位:

      100 = 0b  1100100     

    同理 10进制转8进制:

      8 100 4

      8 12   4

      8 1    1

       0

      100 = 0 144

 

位权展开法与逆位权展开法在所有进制转换通用,不仅仅限制在2  8  16  10 这几种进制 

 

2进制与8进制与十六进制的互相转换:

   通过十进制作为介质完成

     2-> 8 

      2->10   10->8 

      2->16 

      2->10  10-> 16

      8-> 16 

      8-> 10 10-> 16 

 

    因为8进制与16进制的产生原理,对于8进制和16进制与2进制的互转,可以不使用位权展开法而是依据原理解析转换。

      8进制一位 -> 2进制的三位,然后连接

      16进制一位 -> 2进制的4位,然后连接

      0144 = 

        001 100 100 = 0b 1100100

      0x64 = 0110 0100 = 0b 1100100 

      这种方法也叫做组合拆分法,通过的是2进制的3位组合得到的8进制的1位,2进制的4位组合得到16进制的1位的原理。  

  因此8进制和16进制的互转也可以通过2进制作为介质进行。

 

 

一般地,较大数据的进制转换通过计算机软件完成,我们只需要了解简单的执行原理即可,对于8位以内的数据的2进制转换,我们这里介绍一种8421码表法

    128  64  32  16  8  4  2  1 

 

100转2进制:

  100 大于 等于128? 否,128对应系数为0 

  100 大于等于64 ? 是, 128对应系数为1 ,剩余数值为100 - 64 = 36 

  36大于等于32? 是,32对应系数为1,剩余数值为36-32=4

  4大于等于16? 否,16对应系数为0

  4大于等于8? 否,8对应系数为0

  4大于等于4? 是,4对应系数为1,剩余数值为4-4 = 0

  0大于等于2,否,2对应系数为0

  0大于等于1,否1对应系数为0

因此,100得到的二进制位0b 1100100。同样8421用于2进制转10进制,不需要计算位权值而已。

 

posted @ 2020-01-30 09:44  guodaxia  阅读(878)  评论(0编辑  收藏  举报