各进制数之间的转化


本文前面涉及的数据均为整型数据,实型数据则拆分开放在后面单独讲解。将复杂问题简单化,拆分开各个击破。
-------------------------------------------------------------------------------------------------------------------------
Part I 整型部分

(1)十进制与二进制的相互转化。
     十---->二:十进制数除以2,得到一个商和余数(余数无非 0/1),余数单单保存。
                      拿得到的商继续除以2,又得到一个商和余数。保存余数。继续除以2... 
                      直到除得的商为0.把除得的余数按先后顺寻从低位到高位排起(个位开始),
                      所得的数即为转化好的二进制数。
             例如: 89(10)--->1011001(2)
                                      商             余数
                    89/2          44                1
                    44/2          22                0
                    22/2          11                0
                    11/2            5                1
                      5/2            2                1
                      2/2            1                0    
                      1/2            0                1
                     余数按先后顺寻从低到高排列。得到的就是二进制数1011001 。


 二--->十:二进制数从低位开始,位上的值乘以进制数数的N次幂,然后求各个结果的和,
                   得到的就是所求的十进制数。
           例如:10110(2)--->14(10)

                        个位:    0*2^0=0 (0乘以2的0次幂)
                        十位:    1*2^1=2   (0乘以2的1次幂,下面以此类推。。。)
                        百位:    1*2^2=4
                        千位:    0*2^3=0
                        万位:    1*2^4=8
                         0+2+4+0+8=14 
                        转化十进制的结果为14       

(2)十进制与八进制的相互转化。
     十--->八:十进制转八进制方法和转二进制基本一样。不同的是除数改成了8.直接上例
           例如:    385(10)--->601(8)    
                                                 商        余数
                           385/8            48        1                      
                             48/8            6            0
                               6/8            0            6
                            结果就是601  (6/8 商不够1.余数只能为6...当被除数小于除数时,余数为被除数)

   八--->十:和二进制类似。直接上例
            例如:407(8)--->263(10)
                        
                          个位:    7*8^0=7
                            十位:    0*8^1=0
                            百位:    4*8^2=256
                              结果为256+0+7=263

(3)十进制与十六进制的相互转化。
    十--->十六:方法同上,以后不再赘述
        例:    589(10)--->24D(16)
                                            商            余数
                    589/16            36            13(用16进制的D表示)
                    36/16                2                4
                    2/16                    0                2                     
                   结果为24D 

      十六--->十:    
            例:  A3F40D(16)--->10744845(10)
                        个位:    13*16^0=13
                            ...           0*16^1=0
                             ...         4*16^2=1024
                                         15*16^3= 61440
                                        3*16^4=196608
                                        10*16^5=10485760
                结果10744845

(4)二进制、八进制、十进制、十六进制之间相互转化对照表

二进制数(仅4位的2进制数)        =      十进制数      =    十六进制数    =    八进制数 
0000                                               =          0         =        0                        =    0
0001                                               =          1         =        1                        =    1
0010                                               =          2         =        2                        =    2
0011                                               =          3         =        3                        =    3
0100                                               =          4         =        4                        =    4
0101                                               =          5         =        5                        =    5
0110                                               =          6         =        6                        =    6
0111                                               =          7         =        7                        =    7
1000                                               =          8         =        8                        =    10
1001                                               =          9         =        9                        =    11    
1010                                               =          10        =        A                      =    12
1011                                               =          11        =        B                      =    13
1100                                               =          12        =        C                      =    14
1101                                               =          13        =        D                      =    15
1110                                               =          14        =        E                      =    16  
1111                                               =          15        =        F                      =    
17

熟记此表,各进制转换就一目了然了。。。

二--->十六
    111111011010010110011011(这是一个2进制数)
    先把它所包含的数字分成4个4个在一块,如下所示:
    1111  1101  1010  0101  1001  1011
    根据上述常用表可以得到
    1111=F
    1101=D
    1010=A
    0101=5
    1001=9
    1011=B
    那么它所对应的16进制数就是“FDA59B”

十六---->二
    FD5(16)--->1111 1101 0101(2)
     F=1111
     D=1101
     5=0101


 二--->八
        
    1111010011000101(2)--->172305(8)
    把二进制数3个放一起。001 111 010 011 000 101 
    对照表得到:   
    001=1        
    111=7
    010=2
    011=3
    000=0
    101= 5
结果 172305 

八--->二

    7035(8)--->111000011101(2)
    7=111
    0=000    
    3=011    
    5=101
结果111 000 011 101


十六--->八(互转)
    直转换的方法没找到,这个有待牛人的出现。
    相对简单的方法就是:使用二进制作为中间结果会比使用十进制还简单,
    例如:
            八进制的:1234567

            转换为二进制是每个数字转换为三位二进制:001 010 011 100 101 110 111

            然后把这些数字从右边开始进行按四位分组:0 0101 0011 1001 0111 0111

            然后从右边每四位组依次对应一个16进制数:053977


Part II 实型部分
(1)二--->十:将实型数据拆分为整数和小数部分。整数部分前已经学习,现在主要看小数部分。
                            从小数点开始,后一位的值乘以进制数的负一次幂,后二位的值乘以进制数的负
                            二次幂,以此类推。。。
                例如:110.101(2)--->6.625(10)
                            小数部分0.101=(1*2^-1)  + (0*2^-2) + (1*2^-3)=0.5+0+0.125=0.625
                              (注意小数部分是从-1此方开始,而整数部分是从0次方开始。这个要牢记)     
                            110.101(2)=6.625(10)
                        
(2)8进制,16进制转换10进制,将“1*2的-1次方+0*2的-2次方+1*2的-3次方”里面的乘号后面的“2”分别换成“8”和“16”   
                    例如:12.704(8)--->10.8828125 
                                0.704=(7*8^-1) + (0*8^-2) + (4*8^-3)=0.875+0+0.0078125=0.8828125
                           
                                 B4.F2D(16)--->180.948486328125(10)
                                 0.F2D=(15*16^-1)+(2*16^-2)+(13*16^-3)=0.9375+0.0078125+0.003173828125=0.948486328125
       
(3)     十--->二:同样和上面的一样。把实型拆分成整数和小数。
                            小数:拿整体的小数乘以进制数,然后取整记录下来,(二进制得到的整数非0即1。
                                         这符合二进制数的组成)。 取整后的小数部分继续乘以进制数,直到得到的小数部分为0。
                             然后取出来的整数按正序排列,这和整数部分倒序排列恰恰相反
老规矩。上例:
                10.45(10)--->1010.0111001100110011(2)
                    0.45*2=0.9  取整为0    余0.9
                    0.9*2=1.8     取整为1    余0.8
                    0*8*2=1.6    取整为1    余0.6
                    0.6*2=1.2    取整为1    余0.2
                    0.2*2=0.4    取整为0    余0.4
                    0.4*2=0.8    取整为0    余0.8
                    后面开始1.6循环。。。结果约等于1010.0111001100110011(1100循环。。。)                    


(4)十转八、十六进制方法类似。
                80.140625(10) = 120.11(8)
                 80/8   0                   0.140625*8    取  1
                 10/8   2                   (1.125-1)*8   取  1
                 1/8    1                    (1.0-1)*8    取  0

            1032493.13671875(10) = FC12D.23(16)
            1032493/16    13                         0.13671875*16  取 2
            64530/16      2                              (2.1875-2)*16  取  3
            4033/16       1                                (3.0-3)*16     取  0
            252/16        12     
            15/16         15 


(5)二进制转为八进制
采用三位二进制数合为一位八进制数的方法。与二进制转十六进制相似。

八进制数转为十六进制
八进制先转为二进制,再转为十六进制






 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值