1.2 数制及其转换
数制即计数体制,它是按照一定规律表示数值大小的计数方法。日常生活中最常用的计数体制是十进制,数字电路中最常用的计数体制是二进制。
在数字电路中,常用一定位数的二进制数码表示不同的事物或信息,这些数码称为代码。编制代码时要遵循一定的规则,这些规则称为码制。
1.2.1 进位计数制
1.十进制数的表示
人有10个手指和10个脚趾,所以在日常生活中人们通常采用十进制数来计数,每位数可用下列10个数码之一来表示,即0、1、2、3、4、5、6、7、8、9。十进制的基数为10,基数表示进位制所具有的数字符号个数,十进制具有的数字符号个数为10。
十进制数的计算规律是由低位向高位进位“逢十进一”,也就是说,每位累计不能超过9,计满10就应向高位进1。
当人们看到一个十进制数,如123.45时,就会立刻想到:这个数的最左位为百位(1代表100),第二位为十位(2代表20),第三位为个位(3代表3),小数点右边第一位为十分位(4代表4/10),第二位为百分位(5代表5/100)。这里百、十、个、十分之一和百分之一都是10的次幂,它取决于系数所在的位置,称之为“权”。十进制数123.45从左至右各位的权分别是102、101、100、10-1、10-2。这样,123.45按权展开的形式如下。
123.45=1×102+2×101+3×100+4×10-1+5×10-2
等式左边的表示方法称为位置计数法,等式右边是其按权展开式。
一般说来,对于任意一个十进制数N,可用位置计数法表示为:
(N)10=(an-1 an-2… a1a0·a-1… a-m)10
也可用按权展开式表示为:
式中,ai表示各个数字符号为0~9这10个数码中的任意一个;n为整数部分的位数;m为小数部分的位数。
通常,对于十进制数的表示,可以在数字的右下角标注10或D。
2.二进制数的表示
数字系统使用电平的高低或者脉冲的有无来表示信息,因此数字系统采用二进制来计数。在二进制中,只有0和1两个数码,计数规则是由低位向高位“逢二进一”,即每位计满2就向高位进1,例如(1101)2就是一个二进制数,不同数位的数码表示的值不同,各位的权值是以2为底的连续整数幂,从右向左递增。
任意一个二进制数N,可用位置计数法表示为:
(N)2=(an-1 an-2… a1a0·a-1… a-m)2
用按权展开式表示为:
式中,ai表示各个数字符号为数码0或1;n为整数部分的位数;m为小数部分的位数。
通常,对二进制数的表示,可以在数字右下角标注2或B。
3.任意进制数的表示
二进制数运算规则简单,便于电路实现,它是数字系统中广泛采用的一种数制。但用二进制表示一个数时,所用的位数比用十进制数表示的位数多,读写起来很不方便,容易出错。因此,常采用八进制或十六进制。
八进制数的基数是8,采用的数码是0、1、2、3、4、5、6、7。计数规则是从低位向高位“逢八进一”,相邻两位高位的权值是低位权值的8倍。例如数(47.6)8就表示一个八进制数。由于八进制的数码和十进制前8个数码相同,为了便于区分,通常在数字的右下角标注8或O。
十六进制的基数是16,采用的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中,A、B、C、D、E、F分别代表十进制数字10、11、12、13、14、15。十六进制的计数规则是从低位向高位“逢十六进一”,相邻两位高位的权值是低位权值的16倍。例如(54AF.8B)16就是一个十六进制数。对十六进制数,通常在数字右下角标注16或H。
与二进制数一样,任意一个八进制数和十六进制数均可用位置计数法的形式和按权展开的形式表示。一般来说,对于任意的数N,都能表示成以R为基数的R进制数,数N的表示方法也有两种形式,即
位置计数法:(N)R=(an-1 an-2… a1a0·a-1… a-m)R
式中,ai表示各个数字符号为0~R-1数码中的任意一个;R为进位制的基数;n为整数部分的位数;m为小数部分的位数。
R进制的计数规则是从低位向高位“逢R进一”。
1.2.2 数制转换
将数由一种数制转换成另一种数制称为数制转换。由于计算机采用二进制,而解决实际问题时计算机的数值输入与输出通常采用十进制。在进行数据处理时首先必须把输入的十进制数转换成计算机所能接受的二进制数,并在计算机运行结束后把二进制数转换成人们习惯的十进制数输出。
1.任意进制数转换为十进制数
将一个任意进制数转换成十进制数时采用多项式替代法,即将R进制数按权展开,求出各位数值之和,即可得到相应的十进制数。对于八、十六进制这类容易转换为二进制的数,也可以先将其转换成二进制数,然后再转换成十进制数。
【例1-1】将(10110.101)2、(436.5)8、(1C4)16、(D8.A)16转换成十进制数。
解:(10110.101)2=1×24+0×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3
=16+0+4+2+0+0.5+0+0.125
=(22.625)10
(436.5)8=4×82+3×81+6×80+5×8-1=(286.625)10
(1C4)16=1×162+12×161+4×160=256+192+4=(452)10
(D8.A)16=13×161+8×160+10×16-1=(216.625)10
2.十进制数转换为任意进制数
十进制数转换为其他进制数时,整数部分和小数部分要分别转换。整数部分采用除基取余法,小数部分采用乘基取整法。
除基取余法是将十进制整数N除以基R,取余数为K0,再将所得商除以R,取余数为K1,以此类推,直至商为0,取余数为Kn-1为止,即得到与N对应的R进制数(Kn-1…K1K0)R。
【例1-2】将(217)10转换成二进制数。
解:
所以(217)10=(11011001)2
乘基取整法是将十进制小数N乘以基数R,取整数部分为K-1,再将其小数部分乘以R,取整数部分为K-2,以此类推,直至其小数部分为0或达到规定精度要求,取整数部分记为K-m为止,即可得到与N对应的m位R进制数(0. K-1 K-2… K-m)R。
在进制转换时,请不要将结果的次序写错,注意除基取余法、乘基取整法中得到的第一个数最接近小数点则不会混淆了。
【例1-3】将小数0.6875转换成二进制小数。
解:
所以(0.6875)10=(0.1011)2
若十进制小数不能用有限位二进制小数精确表示,则应根据精度要求,当要求二进制数取m位小数时可求出m+1位,然后对最低位作0舍1入处理。
【例1-4】将小数0.324转换成二进制小数,保留3位小数。
解:
所以(0.324)10≈(0.0101)2≈(0.011)2
如果一个十进制数既有整数又有小数,可将整数和小数分别进行转换,然后合并即可得到结果。
【例1-5】将(24.625)10转换成二进制。
解:(24.625)10=(24)10+(0.625)10
=(11000)2+(0.101)2
=(11000.101)2