简易理解二、八、十、十六进制之间的相互转换(含小数)

目录

 一、十进制转二进制、八进制、十六进制

 二、二进制、八进制、十六进制转十进制

 三、二进制转八进制、十六进制

 四、八进制、十六进制转二进制

 五、小数部分的转换

          1、十进制小数转二进制、八进制、十六进制小数

          2、二进制、八进制、十六进制小数转十进制小数


一、十进制转二进制、八进制、十六进制

1、十进制(DEC)转二进制(BIN):

        对于十进制转换为二进制最常用到的方法就是:短除法,比如一个十进制数189(D)转换为一个二进制数即为10111101(B),具体如下:

简易理解二、八、十、十六进制之间的相互转换(含小数)_第1张图片

2、十进制(DEC)转八进制(OCT):

        与上面的方法相同,也是使用短除法,唯一不同的是将除数换成了8,同样以十进制数189转换成八进制数257为例: 

简易理解二、八、十、十六进制之间的相互转换(含小数)_第2张图片

3、十进制(DEC)转十六进制(HEX) :

        方法和上面也是一样,一样是用短除法,除数该换为16,还是以189(D)的转换举例:

简易理解二、八、十、十六进制之间的相互转换(含小数)_第3张图片

 

 二、二进制、八进制、十六进制转十进制

        三者转换成十进制的原理都是一样的,都为按权展开,将每一位数按位乘以进制的位的次方后再将每一位相加。

1、二进制转十进制:

        就拿刚举例过的 10111101(B) -> 189(D)来举例:

        10111101(B)一共八位,按权展开后每位按位乘以进制的位的次方如下:

        1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0

        也就是128+ 0 + 32 + 16 + 8 + 4+ 0 + 1 = 189(D)

2、八进制转十进制:

        同理275(O)->189(H) :

        275(O)一共三位,按权展开:

        * 8^2 + 7 * 8^1 + 5 * 8^0

        也就是128 + 56 + 5 = 189(D)

3、十六进制转十进制:

        BD(H) -> 189(D)

        BD(H)一共两位,按权展开:

        11 * 16^1 + 13 * 16^0

        也就是176 + 13 = 189(D)

三、二进制转八进制、十六进制

1、二进制转八进制:

简易理解二、八、十、十六进制之间的相互转换(含小数)_第4张图片

2、二进制转十六进制 :

        跟二进制转八进制一样的方法:

简易理解二、八、十、十六进制之间的相互转换(含小数)_第5张图片

 四、八进制、十六进制转二进制

1、八进制转二进制:

        其实根据上面的二进制转八进制就能看得出来,这个过程是可以逆向进行的,同样我们可以将275(O)拆成三位数,2   7   5,然后用二分别短除,最后逆序拼接就能得到这个数的二进制。

简易理解二、八、十、十六进制之间的相互转换(含小数)_第6张图片

2、十六进制转二进制: 

        大体上与八进制转二进制差不多,也可以逆推,只不过变成了四位数与“8421”法:

简易理解二、八、十、十六进制之间的相互转换(含小数)_第7张图片

 五、小数部分的转换

       1、十进制小数转二进制、八进制、十六进制小数

        对于十进制小数转二进制、八进制、十六进制小数来讲,原理可以概括为乘X取整,顺序输出的方法,X为要转换的进制数,如十进制小数转二进制小数就是乘二取整,顺序输出,以此类推。一般如果是题目,会讲明精确到小数点后几位。

1、十进制转二进制:

        例如:十进制0.36(D)转化成对应二进制小数精确到小数点后4位:

如下所示,反复将数乘二取整直到达到题目要求的精度:

0.36 * 2 = 0.72   取整数 -> 0

0.72 * 2 = 1.44              -> 1

0.44 * 2 = 0.88              -> 0

0.88 * 2 = 1.76              -> 1   

(已经到了小数点后的第四位,无需再计算下去了)

顺序输出为:0.0101

然后将所得到的数接在小数点后顺序输出得到: 0.32(D) = 0.0101(B)

2、十进制转八进制:

        原理跟上面是一样的,按照公式乘八取整,顺序输出,例:

12.34(D)转换成对应的八进制数,结果精确到小数点后三位

整数部分:

根据短除法得到整数部分为:14

小数部分:

0.34 * 8 = 2.72       取整数 -> 2

0.72 * 8 = 5.76                   -> 5

0.76 * 8 = 6.08                   -> 6

(已到达要求精度,无需再往下计算) 

顺序输出后得到:0.256

最后将所得到的数输出为:12.34(D) = 14.256(O)

3、十进制转十六进制:

         原理跟十进制转二进制、八进制都一样,按照公式解读即可(乘十六取整,顺序输出)

例如:23.56(D)转化为对应的十六进制数,结果精确到小数点后四位:

整数部分:

根据短除法得到整数部分为:17

小数部分:

0.56 * 16 = 8.96       取整数-> 8

0.96 * 16 = 15.36                -> 15(F)

0.36 * 16 = 5.76                  -> 5

0.76 * 16 = 12.16                ->12(C)

(已到达要求精度,无需再往下计算)

顺序输出后得到:0.8F5C

最后将所有得到的数输出后得到:23.56(D) = 17.8F5C(H)

2、二进制、八进制、十六进制小数转十进制小数

        根据上面二进制、八进制、十六进制整数转换为十进制整数我们可以用按权展开的方式计算得到,而在小数这里我们依然可以这么做,将剩下的位数乘以对应的进制位的负数次方最后相加即可得到十进制的小数部分。

1、二进制转十进制:

例如:将二进制数 11.101(B)转化为对应的十进制数:

整数部分:

1* 2^1 + * 2^0

即为 2 + 1,得到:3

小数部分:

* 2^(-1) + * 2^(-2) + * 2^(-3)

即为0.5 + 0 + 0.125,得到:0.625

加上整数部分即为:3.625(D)

2、八进制转十进制:

例如:将八进制数 62.53(O)转化为对应的十进制数:

整数部分:

* 8^1 + 2 * 8^0

即为 48 + 2,得到:50

小数部分:

* 8^(-1) + * 8(-2)

即为 0.625 + 0.046875,得到:0.671875

加上整数部分即为:50.671875(D)

3、十六进制转十进制:

例如:将十六进制数BD.AC(H)转化为对应的十进制数:

整数部分:

11 * 16^(1) + 13 *16^(0)

即为 176 + 13,得到:189

小数部分:

10 * 16^(-1) + 12 * 16^(-2)

即为 0.625 + 0.046875,得到:0.671875

加上整数部分即为:189.671875(D)

       

你可能感兴趣的:(C语言,算法)