常用进制转换

进制介绍

进位制分为我们熟悉的十进制 二进制 八进制 十六进制 二十进制 六十进制等等

十进制

基数为10的计数系统,最常用的进制方式,视为因为人类具有十根手指而产生。

数码:0,1,2,3,4,5,6,7,8,9

规则:逢十进一,借一当十

位权:10^n

二进制

基数为2的计数系统,源于计算机的诞生,主要应用于计算机领域。

数码:0,1

规则:逢二进一,借一当二

位权:2^n

八进制

基数为8的计数系统,据说源于 人手指相间的八个间隔进行计数

数码:0,1,2,3,4,5,6,7

规则:逢八进一,借一当八

位权:8^n

十六进制

基数为16的计数系统,因其与二进制互转的方便性,主要用于计算机领域。

数码:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

规则:逢十六进一,借一当十六

位权:16^n

六十进制

基数为60的计数系统,目前常用在计时系统和角度中,如时间的60秒为一分钟、60分为1小时;360°的1°为60角分,1角分为60角秒。

数码:0,1,2…59,60

六十进制细节忽略

什么是数码?

就是能够表示一个进制数的可能组成元素,如10进制的456, 分别由4、5、6这三个元素组成,我们就称4、5、6是10进制的数码;2进制的1010, 分别由 1 和 0 两个数码表示。

什么是基数?

基数在数学上表示一个集合的元素个数,进制中表示该进制的数码的个数。如2进制有两个数码 1 和 0,则2进制的基数为2。

什么是位权?

数码所在进制数位置所对应的单位值,称之为位权(位置的权重)。如10进制的1234,4所在位置的位权为 10^0 (1),3所在位置的位权为10^1 (10),2所在位置的位权为10^2 (100),即位置N的位权为10^N,对于进制i,即为 i^n

常用进制之间的转换

(1)2进制转10进制

以小数点为界(如1101.110),将拆分成整数部分(1101)和小数部分(110)

计算整数部分

从最低位的位置(从右向左)开始,位置依次列为1,2,3…n,将第n位的数(0或1)乘以2的n-1次方,依次相加即为10进制数。

举例
以整数部分 1101 为例,位置1对应数码 1,位置2对应数码0,位置3对应数码1,位置4对应数码1.

计算:

1
1101(2) = 1*2^0 + 0*2^1 + 1*2^2 + 1*2^3  = 13(10)

计算小数部分

小数位的计算与整数位类似,有两点区别:
(1)小数位计算的方向从左向右开(高位到低位)
(2)小数位的位权是:

1
i^{-n}

举例:
以小数部分110为例,位置1对应数码1,位置2对应数码1,位置3对应数码0

计算

1
110 = 1 * 2^{-1} + 1 * 2^{-2} + 0 * 2^{-3} = 0.75

综上: 1101.110二进制转换为十进制为:13.75

(2)2进制转换为16进制

每四位二进制码对应一位16进制码,为什么呢?
16进制的进制码是0,1,2,,,9,A,,,,F(其实就是0…15),那么四位二级制是多少呢?
最小0000为0,最大1111为15。四位二进制刚好等于一位16进制。
以小数点为界,整数部分,从右向左一次分为每四位一组,不够四位的在左边补0,小数部分将二进制数从左向右每4位一组,不足四位的,右边补0。将每四位二进制转为10进制数,然后将计算结果拼接一起即可。

举例
11011.11 转为 4位一组 : 0001 1011 . 1100

计算
0001(1) 1011(11).1100(75) = 1B.75 (11在16进制中用B表示)

(3)10进制转为2进制

以小数点为界(75.3125),拆分为整数部分(75)和小数部分(0.3125)

整数部分

整数(75)部分除以2,取出其商和余数(32, 1),继续用上一次的商(32)除以2, 依次进行直至商小于2为止。然后把上面得到的所有余数,按照计算得出的先后顺序,依次表示从右向左排列,表示二进制的整数部分

计算:
75 -> (37, 1) -> (18, 1) -> (9, 0) -> (4, 1) -> (2, 0) -> (1, 0) = 1001011

要点
(1)计算余数的顺序跟二级制数码的排列顺序(左向右)相反,先计算出的余数位权最小
(2)除2运算直到商小于2为止,且最后一次小于2的商作为二进制数码位权最大的一位

小数部分

小数部分先乘2,取出计算的整数(如果整数为0则取0),整数部分置0,再上次得出的小数部分继续乘2,一次进行直到小数部分为0为0为止。最终将小数部分计算出的所有整数(1或0)按照计算的先后顺序,从左到右依次排列,作为二进制数。

计算
0.3125(10) -> (0.625, 0) -> (1.25, 1) -> (0.5, 0) -> (1.0, 1) = 0.0101(2)

综上,75.3125 十进制转二进制结果未 1001011.0101

(4)10进制转16进制

与10进制转二进制的运算完全一样,只是把被除数2换成16

如十进制数 93.3125

整数部分

93(10) -> (5, 13) = 5D(16)

小数部分

0.3125 -> (5.0, 0) = 0.5(16)

综上,93.3125 十进制转16进制结果为:5D.5

(5)16进制转2进制

16进制转2进制比较简单,与2进制转16进制的方式相反,将16进制的每一位数,以10进制转2进制的方式,拆分成4位2进制数,不足四位的在左边补0

如将5D.5转为2进制

计算

将5D.5拆分为3个数,分别进行计算(将每个数假设看做10进制数,),如:5,D(13),5
5(10) -> 0101(2)
13(10) -> 1101(2)
5(10) -> 0101(2)

将三个10进制转2进制数计算的结果拼接即为16进制转2进制的计算结果

综上,16进制转二进制结果为:101 1101.0101

(6)16进制转10进制

16进制转10进制,与2进制转10进制方式相同,只是计算时二进制的位权为 2^n,16进制的位权为 16^n

如将5D.5转为10进制

计算

1
5D.5(16) = 5 * 16^1 + 13 * 16^0 + 5 * 16^{-1} = 93.3125(10)