数制及其相互转换是计算机的基础知识,在中专和大学的计算机基础教程中都有相当的篇幅讲述,此内容在各类计算机考试中都占有一定分值。从我校历年使用的各版教材来看,这部分内容的讲述逻辑性不强,介绍的方法较为繁琐,学生学习这部分难点内容感到茫然。我在多年的教学实践中,对此部分内容作了认真的分析,在结构上作了调整,引入了简便方法,取得了较好的教学效果。
一、数制的引入
在日常生活中,人们主要使用十进制,但在某些时候也使用其它进制,如十二进制(如1年有12个月、1打物品有12件),六十进制(如1小时有60分钟、1分钟有60秒),24进制(如一天有24小时)等等。由此,我们引入数制的概念。数制就是多位数码中每一位的构成方法以及从低位向高位的进位规则。
任意进制(r进制)数展开式的普遍形式为:
式中Ai是第i位的系数,它可能是0至(r-1)这r个数码中的任意一个,r称为计数的基数,ri为第i位的权。进位规则为逢r进一。
二、常用的几种数制
我们在日常生活中主要使用十进制,而计算机中数据的表示只使用二进制,但二进制数码对人来说不便于读写。为了开发程序、阅读机器代码和数据的方便,我们经常使用八进制数和十六进制数来等价地表示二进制数,八进制和十六进制可以看着二进制的压缩形式。
二进制—Binary 十进制—Decimal
八进制—Octal 十六进制—Hexadecimal
数制 | 基数 | 进位规则 | 系数 |
二进制 | 2 | 逢2进1 | 0,1 |
八进制 | 8 | 逢8进1 | 0,1,2,3,4,5,6,7 |
十进制 | 10 | 逢10进1 | 0,1,2,3,4,5,6,7,8,9 |
十六进制 | 16 | 逢16进1 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F |
在写一个数字的时候,必须标明对应的数制,常在数字后面加上其对应数制的英文单词的第一个字母标识,也可以将数字用小括号括起来,在右下角用下标标明对应数制。如十六进制数7D.3B可写成7D.3BH或(7D.3B)16 两种形式,由于十进制使用最为普遍,所以不加任何标识的数字默认为十进制数。
三、各种数制间的相互转换
1.将非十进制数转换成十进制数(二、八、十六→十)
把各非十进制数按权展开求和即可。
(1)二→十转换
101.11B=(101.11)2=1×22+0×21+1×20+1×2-1+1×2-2=(5.75)10
(2)八→十转换
37.41O=(37.41)8=3×81+7×80+4×8-1+1×8-2=(31.515625)10
(3)十六→十转换
2A.7FH=(2A.7F)16=2×161+A×160+7×16-1+F×16-2
=2×161+10×160+7×16-1+15×16-2 =(42.496094)10
2.将十进制数转换成非十进制数(十→二、八、十六)
我们用r进制代表二、八、十六进制,则转换方法就是:对于整数部分,“除r取余,自下而上”;对于小数部分,“乘r取整,自上而下”。
下面以十→二转换来说明,(68.3125)10=( ? )2
我们先转换整数部分,显然转换方法就是“除2取余,自下而上”。
2 68 余 数
2 34 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄0 低位
2 17 ┄┄┄┄┄┄┄┄┄┄┄┄┄0
2 8 ┄┄┄┄┄┄┄┄┄┄┄┄┄1
2 4 ┄┄┄┄┄┄┄┄┄┄┄┄0
2 2 ┄┄┄┄┄┄┄┄┄┄┄0
2 1 ┄┄┄┄┄┄┄┄┄┄0
0 ┄┄┄┄┄┄┄┄┄┄1 高位
即 (68)10=(1000100)2
小数部分的转换方法则是“乘2取整,自上而下”。
整数
0.3125 ×2 = 0 .625 0 高位
0.625 ×2 = 1 .25 1
0.25 ×2 = 0 .5 0
0.5 ×2 = 1 .0 1 低位
即 (0.3125)10 =(0.0101)2
所以,(68.3125)10=(1000100.0101)2
同理,十→八转换的方法就是“整数部分:除8取余,小数部分:乘8取整”,十→十六转换的方法就是“整数部分:除16取余,小数部分:乘16取整”,这里就不再赘述。
3.非十进制数之间的相互转换(二n八、二n十六)
(1)二→八转换
1位八进制数可用3位二进制数来表示。因此二进制数转换成八进制数, 只要以小数点为界, 向左向右每3位二进制数用1位八进制数来代替即可,不足三位的用0补足。
例: (1011010.1)2=( ? )8
(001 011 010.100)2
(1 3 2 . 4)8
即,(1011010.1)2=(132.4)8
(2) 八→二转换
把一个八进制数转换成二进制数, 只要将1位拆分成3位即可。
例: (572.3)8=( ? )2
( 5 7 2. 3)8
(101 111 010 .011)2
即,(572.3)8=(101111010.011)2
(3)二→十六转换
1位十六进制数可用4 位二进制数来表示。因此二进制数转换成十六进制数, 只要以小数点为界, 向左向右每4 位二进制数用1位十六进制数来代替即可,不足4 位的用0 补足。
例: (1011010.1)2=( ? )16
(0101 1010.1000)2
(5 A . 8)16
即,(1011010.1)2=(5A.8)16
(4)十六→二转换
把一个十六进制数转换成二进制数, 只要将1位拆分成4位即可。
例:(F7.A)16=( ? )2
( F 7 . A)16
(1111 0111 . 1010)2
即,(F7.A)16=(11110111.101)2
四、二n十整数部分转换的简便方法
在教学实践中,根据二进制数的特点,我找到了一种二进制整数与十进制整数之间转换的简便方法,学习了前面的繁琐方法,再来使用这一简便方法,学生感到清新自然,乐于接受。
这个简便方法的前提是要求记住二进制整数部分各位的权值,对于二进制整数来说,从小数点左边第一位数起,其权值分别是20、21、22、23、24、25、26、27、28、29、210,即1、2、4、8、16、32、64、128、256、512、1024,比较容易记住。
将一个二进制整数转换为十进制整数的时候,从右往左依次数二进制各位的权,如果系数为1就加上对应的权,如果系数为0则不加。如:
1010011B=(1010011)2=64+16+2+1=83
将一个十进制整数转换为二进制整数,先把该数写成二进制的权值相加的形式。如:117=64+32+16+4+1,
顺着从右往左数二进制各位的权,如果有则补1,没有则补0,可得:
117=1110101B
我们用这一简单方法的局限性在于:它只适用于二进制数与十进制数整数部分的转换,而且数权的时候一定不能数漏。
通过结构清晰的讲述,便于学生举一反三,再辅以大量的练习,并教会他们使用科学计算器来进行各种数制间的转换,检验自己的转换结果,增强他们的学习兴趣,学生就能在短时间内掌握计算机中的数制及其相互转换的方法和技巧,为后续课程打下坚实的基础。