进制转换

《计算机文化基础》课程是大学阶段计算机学习的一门基础入门课,在课程的开始章节往往要讲到二进制及几种进位数制的转换问题。每当学生遇到这部分内容时,总是感到很茫然。计算机是采用二进制编码,为什么还要学与其他进位进制的复杂转换关系呢?而且通过开始菜单“附件”中的“计算器”功能可以轻松地得到各种数制间的转换。这时候我们就要给学生耐心引导,计算机数制问题是我们学习计算机知识的一个重要思维方式,也是计算机后续课程的基础。我们要为学生具体讲解概念和方法,并尽可能地在技巧上简单化。以下是笔者讲授这部分知识的方法和技巧,与读者共同探讨。
1 数制的概念
“进位数制”在日常生活中经常遇到,人们有意无意地在和进位数制打交道。例如:一双筷子(即逢二进一),十毫米等于一厘米(即逢十进一)、一刻钟(即逢十五进一)、一小时(即逢六十进一),十二个月为一年(即逢十二进一)等等。
在计算机中采用的是二进制,它的特点是“逢二进一”,因此只有0和1两个数字符号,计算机较容易实现。在程序设计中,十六进制常用作二进制的压缩形式,一位十六进制数可表示四位二进制数,而一位八进制数可表示三位二进制数。
十进制0~15的数与二进制、八进制、十六进制数的对应关系见表1。
2 数制的特点
2.1 基数
在一种进位数制中,只能使用一组固定的数字符号来表示成千上万个数。我们称这组数字的个数为基数。例如:
二进制的基数为2,即它由两个数(0,1)组成 ;
八进制的基数为8,即它由8个数(0,1,2,3,4,5,6,7)组成;
十进制的基数为10,即它由10个数(0,1,2,3,4,5,6,7,8,9)组成;
十六进制的基数为16,即它由16个数(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)组成。
2.2 逢N进一
设N为基数。则二进制数“逢二进一”,八进制数“逢八进一”,……,依此类推。
例如:十进制数2,用二进制表示为10;十进制数8,用八进制表示为10;十进制数17用十六进制表示为10等等。
2.3 位权表示法
对于多位数,处于某一位上的“1”所表示的数值的大小,称为该位的位权。任何进位数制表示的数都可以写成按位权展开的多项式之和。
例如:十进制数1 356.82=1×103+3×102+5×101+6×100+8×10-1+2×10-2
从上式可以看出从小数点左边起,个位数的位权为100,十位数的位权为101,百位数的位权为102,……,依此类推。位权的值恰好是基数的若干次幂。一般情况下,对于N进制数,整数部分第i位的位权为N i-1,而小数部分第j位的位权为N-j。
3 数制之间的转换
在数制运算中,必须指明该数是什么数制的数。例如:(1101)2,(1101)8,(1101)10,(1101)16所代表的数是不一样的,在这里我们用下标进行区别。另外还可以用字母进行区分:B代表二进制,O代表八进制,D代表十进制,H代表十六进制。例如10110B,155O,288D,3CH等。注意字母必须放在数的最后。
3.1 二进制和八进制及十六进制数转换成十进制数
转换方法是将非十进制的数按位权展开求和。
(1)二进制数转换成十进制数:
(10110.01)2 = 1×24+0×23+1×22+1×21+0×20+0×2-1+1×2-2 =
16+0+4+2+0+0+0.25=(22.25)10
(2)八进制数转换成十进制数:
(1325.65)8=1×83+3×82+2×81+5×80+6×8-1+5×8-2=
512+192+16+5+0.75+0.078125=(725.828125)10
(3)十六进制数转换成十进制数:
(12DA.4B)16=1×163+2×162+13×161+10×160+4×16-1+11×16-2 =
4 096+512+208+10+0.25+0.042 968 75=(4 826.292 968 75)10
3.2 十进制数转换成二进制和八进制及十六进制数
转换方法是将N进制数,整数部分“除N取余,从下至上”,小数部分“乘N取整,从上至下”。下面以十进制转换成二进制来说明。
十进制整数转换成二进制整数(口诀:“除2取余,从下至上”)。
例如:(175)10= (10101111)2          
(2)十进制小数转换成二进制小数(口诀:“乘2取整,从上至下”)。
例如:(0.6875)10=(0.1011)2
同理,十进制转换成八进制,十六进制都可使用上述方法。即:“除8取余, 乘8取整”和“除16取余,乘16取整”。这里就不一一赘述。如感兴趣可将上面例题中的十进制数分别转换成八进制的十六进制进行练习。
3.3 二进制和八进制及十六进制数之间的转换
3.3.1 二进制和八进制数之间的相互转换
一位八进制数可用三个二进制数来表示。因此二进制数转换成八进制数,只要以小数点为界,向左向右每三位二进制数用一个八进制数来代替即可,不足三位的用0补足。
        例:(1011100101.0101)2=(1345.24)8     
利用以下方法和技巧:
( 001  011  100  101  .  010  100 )2
(   1      3       4      5 .       2      4  )8
同样,把一个八进制数转换成二进制数,只要将一位拆分成三位即可。
例:( 734.52 )8=( 111011100.10101 )2
( 7        3        4   .      5       2  )8
(111   101   100  .   101   010 )2
3.3.2 二进制与十六进制数之间的相互转换
一位十六进制数可用4个二进制数来表示。因此二进制数转换成十六进制数,只要以小数点为界,向左向右每4位二进制数用一个十六进制数来代替即可,不足4位的用0补足。
例:( 1011100101.0101 )2=( 2E5.5 )16
利用以下方法和技巧:
( 0010   1110  0101  .  0101 )2
(    2        E         5            5 )16
同样,把一个十六进制数转换成二进制数,只要将一位拆分成四位即可。
例:(7D3.A2 ) 16 =( 011111010011.10100010 )2
(   7           D        3     .       A        2  ) 16
( 0111   1101   0011   .   1010   0010 )2
通过以上讲述,我们发现数制间的转换途径有多种,在应用时一定要灵活。一般初学者可以把二进制作为桥梁,这样使任何数制间的转换都与二进制发生关系,运算思路容易理解,转换方法容易掌握。
有了理论性的讲授后,再辅助以一定的练习,学生便可在短时间掌握各种进制之间的转换方法,就能在以后的学习中熟能生巧,并加深对进制在计算机中作用的理解。
原文地址:https://www.cnblogs.com/lumnm/p/1777395.html