一:准备工作
1.进位制
维基百科:
进位制是一种记数方式,亦称进位计数法或位值计数法。利用这种记数法,可以使用有限种数字符号来表示所有的数值。一种进位制中可以使用的数字符号的数目称为这种进位制的基数或底数。若一个进位制的基数为n,即可称之为n进位制,简称n进制。现在最常用的进位制是十进制,这种进位制通常使用10个阿拉伯数字(即0-9)进行记数。
2.进位
任何进制,都有进位的说法(以位数增加即数量增加来弥补种类的不足),二进制的满2进一,十进制的满10进一等等,就比如对于二进制01后一位不是02,因为只有0和1两种符号,所以进位变成10,同样,八进制的57 后面不是58而是60。
3.拆位
任意一个数N可用下式表示:
N=(dn-1dn-2…d1d0.d-1d-2…d-m)r
=dn-1rn-1dn-2rn-2…d1r1d0r0d-1r-1d-2r-2…d-mr-m
(其中r为基数,n、m为正整数)
例1:r=10的数321
十进制的321代入公式为
d2d1d0 = d2x r2 + d1x r1 + d0x r0
即:321 = 300+20+1 = 3x100+2x10+1 = 3x102 + 2x101 + 1x100
例2:r=2(10)的数1010(此处的2为十进制)
二进制的1010代入公式为
d3d2d1d0 =d3x r3+ d2x r2 + d1x r1 + d0x r0
1010 =1x103 + 0x102 + 1x101 +0x100 =1x10(2)3 + 1x10(2)1
=1x2(10)3 + 1x2(10)1
八进制:52=5x10(8)+2
十六进制:FF=Fx10(16)+F
4.说明
文章下面,二进制用10101(2),八进制用32(8),十进数用57(10) ,十六进制 用FF(16) 等下标分别代替,R进制为任意进制的意思。(建议:可查看右侧的目录)
二:进制转换方法
①:按“权”展开法(适用范围:R进制→十进制)
②:减权定位法(适用范围:十进制→R进制)
③:按基数重复相乘(除)法(适用范围:R进制→十进制)
④:重复相除(乘)法(适用范围:十进制→R进制)
⑤:分组法(适用范围:二进制⇄八,十六进制)
⑥:间接法
总结:上述方法中,①②互为逆运算,③④互为逆运算,⑤用于M进制和Mn 进制的转换(其中m,n为正整数),其他用⑥。
如果以十进制为中心的话,可分为三类:
1.十⇄R: ①②③④
2.M⇄Mn : ⑤
3.其他: ⑥
如下图所示
注:①②③④方法其实可用于R进制与R进制的转换,但人类只熟悉于十进制的四则运算,所以主要就用于十进制和R进制的相互转换。
三:方法详解
1.方法①:按“权”展开法
(1)二进制→ 十进制
先以0100 1110(2) → 78(10)为例
①:01001110 (2) = 1 x 26 + 1 x 23 + 1 x 22 + 1 x 21 = 78
上面即为按“权”展开法的使用过程,具体可以拆分为三个步骤,1:拆位,2:转换, 3:运算。
第一步:拆位
01001110(2) = 1(2)x106(2) + 1(2)x103(2) + 1(2)x102(2) + 1(2)x101(2)
第二步:分别转换
二进制 | 十进制 |
---|---|
0000 0000 | 0 |
0000 0001 | 1 |
0000 0010 | 2 |
第三步:运算
1(10) x26 (10) + 1(10) x23(10) + 1(10) x22(10) + 1(10) x21(10) = 64(10) +8(10)
+4(10) +2(10) =78(10)
(2)八进制→ 十进制
例2:62(8) → 50(10)
第一步:拆位
62(8)= 6(8)x10(8)+ 2(8)
第二步:转换
八进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
10 | 8 |
第三步:运算
6(10) x8(10)+ 2(10)= 48(10) +2(10) =50(10)
即,①:62(8) = 6 x 81 + 2 x 80 = 50
(3)十六进制→ 十进制
例3:FF(16) → 255(10)
第一步:拆位
FF(16)=F(16)x10(16) +F(16)
第二步:转换
十六进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
10 | 16 |
第三步:运算
15(10)x16(10) +15(10) = 240 (10)+ 15(10) = 255(10)
即,①:FF(16) = 15 x 161 + 15 x 160 = 255
可以从上面得出,所谓的按权展开法,就是把多位数拆分,然后对照转换表一一转换,然后再组合起来,这里说一下什么是“位权”,即“权”,位权,是指数制中每一固定位置对应的单位值。(百度百科的解释),所以在进行第二步:转换的时候,对于任意进制R,表中10所对应的值,变为十进制都是R,比如:十六进制的10 (16)= 16(10) ,八进制的10 (8)= 8(10) 所以只需要记忆个位数所对应的数字或者字母(十进制以上)。
2.方法②:减权定位法
如下图
其实就是方法①的逆运算
比如上面出现的例子:
①:01001110 (2) = 1 x 26 + 1 x 23 + 1 x 22 + 1 x 21 = 78
移项:
1 x 23 + 1 x 22 + 1 x 21 = 78 - 1 x 26
1 x 22 + 1 x 21 = 78 - 1 x 26 -1 x 23
1 x 21 = 78 - 1 x 26 -1 x 23 -1 x 22
0 = 78 - 1 x 26 -1 x 23 - 1 x 22 - 1 x 21
3.方法③:按基数重复相乘(除)法
(1)二进制→ 十进制
例1:101001(2) = (((( 1 x 2 + 0 )x 2 + 1 )x 2 + 0 )x 2 + 0 ) x 2 + 1 = 41
这样可能不好理解,从左往右依次变为二进制数看看:
101001(2)变为(下面的10均为二进制数):
1 = 1
10 = (1 x 10 + 0 )
101 = ((1 x 10 +0 )x 10 + 1 )
1010 = ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 )
10100 = ( ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 ) x 10 + 0 )
101001 = ( ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 ) x 10 + 0 ) x 10 + 1
然后再全部转为十进制数,就变成了例1的形式。
又或者可以这样理解。
就比如十进制数321有两种拆分形式
第一种:321 = 3 x100 + 2 x 10 + 1(按权拆分)
把第一种提公因式就变为第二种
第二种:321 = ( 3 x 10 + 2) x 10 + 1
即把方法①提公因式,就能得到方法③
(2)八进制→ 十进制
例2:622(8)→ 402(10)
方法① :622(8) = 6 x 82 + 2 x 8 1 + 2 x 80 = 402
方法③ :622(8) = ( 6 x 8 + 2 ) x8 +2 = 402
(3)十六进制→ 十进制
例3:DEF(16)→ 3567(10)
方法① :DEF(16) = 13 x 162 + 14 x 16 1 + 15 x 160 = 3567
方法③ :DEF(16) = ( 13 x 16 + 14 ) x16 +15 = 3567
注:方法③和④ 括号里面的除和乘均是针对小数,这里就不过多阐述。
4.方法④:重复相除(乘)法
(1)十进制 → 二进制
例1:78(10) → 0100 1110(2)
如下图
即 78(10) = 100 1110(2)
上图可等同于
把右侧从 78 = 39 x 2 + 0 一直合并到1 = 2 x 0 + 1,变为
78 = 39 x 2 + 0
78 = ( 19 x 2 + 1 ) x 2 + 0
78 = ( ( 9 x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( 4 x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( 2 x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( ( 1 x 2 + 0 ) x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( ( ( 0 x 2 + 1 ) x 2 + 0 ) x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0 =1001110
从左边到右边就是方法③,所以方法④为方法③的逆运算
(2)十进制 → 八进制
即796(10) = 1434(8)
(3)十进制 → 十六进制
即796(10) = 31C(16)
5.方法⑤:分组法
(1)二进制→八进制
例:11010111(2) → 327(8)
进制表:
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
以三位为一组(不够三位则补零)
即 11010111(2) → 327(8)
(2)二进制→十六进制
例:11010111(2) → D7(16)
进制表:
二进制 | 十六进制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0 110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
以四位为一组(不够四位则补零)
即 11010111(2) → D7(16)
(3)八进制→二进制
例:327(8)→ 11010111(2)
进制表:
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
即 327(8) → 11010111(2)
(4)十六进制→二进制
例: D7(16) → 11010111(2)
进制表:
二进制 | 十六进制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0 110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
即 D7(16) → 11010111(2)
6.方法⑥:间接法
比如:八进制转为十六进制
可以先让八进制转为二进制或者十进制,再转十六进制。反过来,对于十六进制转八进制,也类似。
例题略
四:参考资料
1.https://www.cnblogs.com/gaizai/p/4233780.html#_labelConvert31
2.计算机组成原理(唐朔飞第二版附录6A)