程娜娜
(江苏旅游职业学院,江苏 扬州 225000)
大学“计算机基础”是高校计算机专业开设的一门专业必修课,也是本专业学生初识计算机的基础课,介绍了基本的计算机发展史、基本组成、基本原理等知识外,其最重要的概念就是冯·诺伊曼提出的二进制的概念。二进制也涉及后续学习的其他课程,如“单片机技术应用”“数字电路”“C 语言程序设计”。在日常计数中,人们熟悉采用的是十进制计算,二进制与十进制以及与后来发展出来的八进制、十六进制等各类进制数之间如何相互转换成为初学者的难题。作为教师,要想将这个基本又重要的知识跟学生讲通、讲透,在教学中就要运用一定的转换方法,本文就进制转换的方法教学展开探究,将进制转换的问题作进一步阐释。
对于进制转换这部分基础知识,虽然在其他课程教学中也有出现,属于重复学习,但是还有一些学生会混淆,因为在计算机中不仅是二进制和十进制之间的相互转换,还包括十进制转换成八进制、八进制转换成十进制、二进制转换成八进制、八进制转换成十六进制等。这些相互间的转换可达12种之多,相当复杂,再把整数部分和小数部分分开讨论,学生更是乱上加乱了。笔者在多年的大学计算机课程教学中[1],不断摸索不断积累经验,认为进制间转换是有规律可循的,一旦熟悉方法,就可以长久、熟练掌握。
进制(system of numeratio)也就是进位计数制,是人为定义的带进位的计数方法。X进制表示每一位置上的数运算时都是逢X进一位,十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。任何一个数制都包含两个基本要素:基数和位权。基数就是数制所使用数码的个数,例如,二进制的基数为2,十进制的基数为10。位权表示数制中某一位上的1所表示数值的大小即所处位置的价值。例如,十进制的456,4的位权是100,5的位权是10,6的位权是1。二进制中的 1100,第一个1的位权是8,第二个1的位权是4,第一个0的位权是2,第二个0的位权是1。
人们最早接触、最为熟悉的就是十进制,在实际教学中,对于进制转换这部分内容应该先以十进制为中心,把众多的转换问题简单归结为两个方面:其他进制转换为十进制;十进制转换为其他进制。学生学习起来易于接受。
二进制转换为十进制的传统方法为“按权展开相加法”。二进转换为十进制,基本做法:把二进制数首先按上述概念中提到的,写成位权系数展开式,然后将展开式相加求和。其位权的值要分清是整数部分还是小数部分,二进制整数从低位向高位,分别是第0位,即位权是2的0次方,第一位,即位权是2的1次方等,小数部分从低向高分别是第-1位,即位权是2-1,第-2位,即位权是2-2等,在教学中要对此特别强调,因为许多学生经常把二进制整数部分的最低位的位权习惯性从1开始标,导致下面就会跟着一起错。以下用一个实例加以说明。
将二进制数1011.01转换为十进制。1011.01按权展开即可表示为:(1100.01)B=0*2^0+0*2^1+1*2^2+1*2^3+0*2^-1+1*2^-2=(12.25)D。这边要说明的是,字母B表示二进制,O表示八进制,D表示十进制,H表示十六进制。此方法延伸到其他进制转换为十进制,按权展开相加法,将相应进制每位上的数乘以权,然后相加之和即是十进制数。
例如,将八进制数20.05转换为十进制。要注意的是,在八进制中,只有0, 1, 2, 3, 4, 5, 6, 7共8个数码,基数为8。20.05按权展开表示为:(20.5)O=0*8^0+2*8^1+5*8^-1=(16.625)D。
再如,将十六进制数1E1转换为十进制。在十六进制数中,共有16个数码,分别是0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F,其中,A, B, C, D, E, F这6个字母分别表示10, 11, 12, 13, 14, 15,其基数为16。按权展开表示为:(1E1)H=1*16^0+E*16^1+1*16^2=(496)D。
十进制数转换为二进制数[2-3],也分为整数和小数的转换,两者转换方法不同,要先将十进制数的整数部分和小数部分分别转换,然后加以合并。(1)整数采用“除2取余法”。具体做法:用短除法列出竖式,将十进制整数反复除以2,每次得到一个商和一个余数,如此进行,直到商为0为止;把先得到的余数按从下往上的顺序依次排列起来,就是得到的二进制整数部分。(2)小数部分转换为二进制小数时采用“乘2取整法”。具体做法:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为0。这种乘法有时会出现乘不尽的情况,也就是说积不会为0,这时可根据题目要求保留小数位数即可。把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。以将十进制数305.25转换为二进制数的实例加以说明:
(1)整数部分。
305/2=152余1
152/2=76余0
76/2=38余0
38/2=19余0
19/2=9余1
9/2=4余1
4/2=2余0
2/2=1 余0
1/2=0余1
注意:余数部分读取的顺序为从下往上,所以得到:
(305)D=(100110001)B
(2)小数部分。
0.25
X 2
0.50 (得到整数部分0为高位)
X 2
1.00 (得到整数部分1为低位)
(0.25)D=(0.01)B
故,(302.25)D=(100101110.01)B
通过此方法延伸到十进制转换为其他进制:整数部分采用短除法,将十进制转换为N进制,就是将十进制数除以“N”,直到商为0 为止,得到一串余数,最后读数时,从最后一个余数读起,直到最前面的一个余数。小数部分转换方法为将小数乘以“N”,取整数部分,剩下小部分继续乘以“N”,再取整数部分,剩下小部分又乘以“N”,一直到小数部分为0为止。
上述两种方法只是讨论十进制与其他进制之间的转换[4],各种进制之间要互间转换,比如,八进制和二进制数、十六进制数和二进制数,可以先把八进制数或者十六进制数转换为十进制数,再把十进制数换为二进制数,而这两步转换都和十进制有关系,虽然方法比较笨,但是可以避免出错。