程铁良 常巧霞
(郑州职业技术学院,郑州 410121)
数制是人们利用符号进行计数的科学方法。日常生活中,我们用到的大都是十进制的数。其实数制有很多种,在计算机中,常要用到二进制、八进制、十六进制的数,所以计算机的许多基础学科中都涉及到了进制转换的问题。在实际教学过程中,笔者发现,好多学生不能正确、熟练地进行进制转换,或对进制转换的概念比较模糊。笔者根据多年的教学经验,就进制转换问题,提出一些思考或建议。
在许多教材中,关于进制的转换,一般是这样的:
二进制数、十六进制数转换为十进制数的规律是相同的:把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”。例如:
(1)把(1001.01)2转换为十进制数
解:(1001.01)2
=1×23+0×22+0×21+1×20+0×2-1+1×2-2
=8+0+0+1+0.5+0.25
=9.75
(2)把(38A.11)16转换为十进制数
解:(38A.11)16
=3×162+8×161+10×160+1×16-1+1×16-2
=768+128+10+0.0625+0.0039
=906.0664
整数转换。一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法。
例:(1)将25转换为二进制数
解: 25÷2=12 余数1
12÷2=6 余数0
6÷2=3 余数0
3÷2=1 余数1
1÷2=0 余数1
所以25=(11001)2
由于4位二进制数恰好有16个组合状态,即1位十六进制数与4位二进制数是一一对应的。所以,十六进制数与二进制数的转换是十分简单的。
(1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可,简称位分四位。
例:将(4AF8B)16转换为二进制数。
解: 4 A F 8 B
0100 1010 1111 1000 1011
所以(4AF8B)16=(1001010111110001011)2
(2)二进制数转换为十六进制数,分别向左,向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位。
例:将二进制数(111010110)2转换为十六进制数
解: 0001 1101 0110
1 D 6
所以(111010110)2=1D6H
转换时注意最后一组不足4位时必须加0补齐4位。
首先,要理解数制的概念。数制是用一组固定的符号和统一的规则来表示数值的方法。其基本术语有:数码:数制中表示基本数值大小的不同数字符号。基数:数制所使用数码的个数。位权:数制中某一位上的1所表示数值的大小。
对于十进制来说,是以10为基数,有10个数码:0、1、2、3、4、5、6、7、8、9。小于10的是个位,从0~9,一位数,然后是十位,从10到99,2位数,依此类推百位、千位...对于二进制、八进制、十六进制来说基数分别是2、8、16,它们的个位数不同,二进制0~1是个位,八进制0~7,十六进制0~F(15),超过这些才能进位到下一位。十进制逢十进一,八进制逢八进一,这样八进制里只能出现0~7,如果个位到8了,就会自动进位,这样第二位变成1,第一位的数都进上去了,就变成0了,因此八进制超过8的数用两位表示。
对于任何一个数来说,都可以表示成加法的形式:
例如:256=2×100+5×10+6×1
这种方法叫按权展开,意思就是从高到低一级一级展开成加法的形式;对于一个八进制的数来说也是这样,只是在基数那儿有些区别,八进制是1、8、64、…
例如:271=2×64+7×8+1×1
对于十六进制来说,基数是1、16、256、4096…
例如:35=3×16+5×1
对于二进制来说,基数是1、2、4、8、16…
例如:110=1×4+1×2+0×1
总结一下基数,就是从0次方开始,然后一次方、二次方…相当于个位、十位、百位…。
数制转换相当于把数重新排一下,一般情况下我们是用十进制,对于一个数来说,个位表示几个、十位表示几十,百位表示几百,这样就很方便地知道一个数有多大。
例如255,我们知道这个数有二百、五十、五个,也就是右边起,第一位是个位表示有几个,这儿有五个;第二位是十位表示有几十,这儿有五十;第三位是百位,表示有几百,这儿有二百,总数共是255个。
对于八进制来说,总数是255个的时候,写成八进制的数是377,分析一下是怎么回事: 从右边开始,第一位是个位,这儿是7个。由于是八进制,第二位就不是十位了,而是八了,这儿有7个八也就是五十六。同样第三位也不是百位,而是六十四,这儿有3个六十四也就是一百九十二,总数仍然是255。
从这儿可以看出,总数相同的时候,表示成不同数制,数也不一样,关键是每个数位上的基数不同,例如对于十进制来说,第二位是十位,这个位置上的数一个顶十个,而对于八进制的第二位,这个位置上的数一个只能顶八个。
数制转换的时候只是把数按要求重新排列一下,比如转成八进制,就按八进制的要求排列,二进制就按二进制的要求排列。
八进制各个数位是:1、8、64、512…相当于十进制的个、十、百、千,按照8的n次方往后排;二进制各个数位是:1、2、4、8、16…相当于十进制的个、十、百、千、万,按照2的n次方往后排;十六进制的分别是:1、16、256…
转换的时候,必须要按照上面的要求来重新排列数字,基本方法是找出最近的一个数位,然后用除余法找出各个位置上的数。比如:
以255为例。离255最近的数是第三位64,用255除以64,得3余63,第三位上求出来是3;用余数63除以第二位8,得7余7,第二位上求出来是7;用余数7除以第一位1,得7余0,第一位上是7;所有的数都摆好了,结果是377。
以15为例。跟数位表对一下,最近的是8,除一下得1余7,第四位是1;用余数7除以4,得1余3,第三位是1;用余数3除以2,得1余1,第二位是1;用余数1除以1,得1余0,第一位是1;所有的数位都排好,结果是1111。
当然,在实际操作中,两种数制转换方法不是截然分开的,而是相互结合、取长补短的。总之,学无定法,贵在动脑。只要勤动手,肯动脑,一切问题都可以迎刃而解。
[1]孟林.计算机文化基础教程[M].成都:电子科技大学出版社,2004.
[2]北大数学力学系.高等代数[M].北京:高等教育出版社,2000.