1.2 数制
人们在日常生活中经常遇到计数问题,并且习惯于用十进制数。而在数字系统,例如计算机中,通常采用二进制数,有时也采用十六进制数或八进制数。这种多位数码的构成方式以及从低位到高位的进位规则称为数制。
1.2.1 十进制
人们在日常生活中习惯以10为基数的计数体制。十进制计数体制有0、1、2、3、4、5、6、7、8、9十个数码来表示,其计数规律是“逢十进一”。
十进制数4587.29可以表示为
(4587.29)10=4×103+5×102+8×101+7×100+2×10-1+9×10-2
式中,103、102、101、100、10-1和10-2分别为各数码的权值。一般任意十进制数用下标10或D(Decimal)来表示,如式(1.2.1)所示。
式中,K为基数“10”的第i次幂的系数,它可以是0~9中任何一个数字。
如果将式(1.2.1)中的10用字母R来代替,就可以得到任意进制数的表达式,如式(1.2.2)所示。
用数字电路来存储或处理十进制数是不方便的。因为构成数字电路的基本思路是把电路的状态与数码对应起来。而十进制的十个数码要求电路有十个完全不同的状态,这样使得电路很复杂,因此在数字电路中不直接使用十进制数。
1.2.2 二进制
二进制计数体制中,只有0和1两个数码,其计数规律是“逢二进一”,即1+1=10(读为“壹零”),这里的“10”与十进制数的“10”是完全不同的,它并不代表数“拾”,左边的“1”表示21系数,右边的“0”表示20系数,二进制数用下标2或B(Binary)表示,二进制数10表示为(10)2=(10)B=1×21+0×20,因此,二进制就是以2为基数的计数体制。
任意二进制数的表示如式(1.2.3)所示。
式中,Ki为基数“2”的第i次幂的系数,它可以是0或1。式(1.2.3)也可以作为二进制数转换为十进制数的转换公式。
例1.2.1 将二进制数1010110.01转换为十进制数。
解:将每1位二进制数与其位权相乘,然后相加,便得相应的十进制数。
(1010110.01)2=1×26+0×25+1×24+0×23+1×22+1×21+0×20+0×2-1+1×2-2=(86.25)10
与十进制相比较,二进制具有以下优点,因此,它在计算机技术中被广泛采用:
1)二进制的数字电路装置简单可靠,所用元件少。
二进制只有两个数码0和1,因此它的每1位数都可用任何具有两个不同稳定状态来表示,例如,半导体开关器件的饱和与截止,继电器触点的闭合和断开,灯泡的亮和不亮等。只要规定其中一种状态表示1,另一种状态则表示0,就可以表示二进制数。这样,数码的存储、分析和传输,就可以用简单而可靠的方式进行。
2)二进制的基本运算规则简单,运算操作方便。
采用二进制也有一些缺点。用二进制表示一个数时,位数多,例如,十进制数49表示为二进制数时,即为110001,使用起来不方便也不习惯。因此,在运算时原始数据多用十进制数,在用数字系统处理时,需要将十进制原始数据转换成数字系统能接受的二进制数。而在运算结束后,再将二进制数转换为十进制数表示最终结果。
1.2.3 十-二进制之间的转换
十进制数转换成其他进制数的整数转换,采用基数连除法。把十进制整数N转换成R进制数的步骤如下:
1)将N除以R,记下所得的商和余数。
2)将上一步所得的商再除以R,记下所得商和余数。
3)重复做第2)步,直到商为0。
4)将各个余数转换成R进制的数码,并按照和运算过程相反的顺序把各个余数排列起来,即为R进制的数。
十进制小数转换成其他进制小数时,采用基数连乘法。把十进制小数m转换成R进制数的步骤如下:
1)将m乘以R,记下所得的积,取出积的整数部分,小数部分待用。
2)将上一步所得的小数值再乘以R,取出所得积的整数部分,小数部分待用。重复该过程直到积的小数部分为0,或达到有要求的准确度为止。
3)按照运算过程的顺序把各步骤中的整数排列在小数点后,即为R进制的小数。
例1.2.1介绍了二进制数转换为十进制数的方法。十进制数转换为二进制数时,整数部分和小数部分的方法不同,下面分别介绍。
1.十进制数的整数部分转换为二进制数的方法
将十进制数整数每除以一次2,就可以根据余数得到二进制的1位数字,因此,只要连续除以2直到商为0。
例1.2.2 将十进制数37转换为二进制数。
解:将十进制数37每除以一次2,得到的余数和商如图1.2.1所示。
由上可得:(37)10=(100101)2
当十进制数较大时,不需要逐次除以2,而是将十进制数和与其相当的2乘幂项对比,使转换过程简化。
2.十进制数的小数部分转换为二进制数的方法
将十进制小数乘以2,可以得到2-1的系数b-1,将十进制小数每次除去上次所得积中的整数,再乘以2,直到满足误差要求继续“四舍五入”为止。
例1.2.3 将十进制数小数0.706转换为二进制数,要求其误差不大于2-10。
解:按上面的方法计算,可得b-1、b-2、b-3、…、b-9,如图1.2.2所示。
图1.2.1 十进制数37转换为二进制数
图1.2.2 十进制数小数0.706转换为二进制数
由于最后的小数小于0.5,根据“四舍五入”的原则,b-10应为0,所以由上可得:(0.706)10=(0.101101001)2,其误差小于2-10。
1.2.4 十六进制
用二进制数来表示十进制数需要的位数较多,不便于书写和记忆,因此,在数字计算机中常采用十六进制数或八进制数来表示。
十六进制是以16为基数的计数体制。十六进制计数体制有0、1、2、3、4、5、6、7、8、9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15)十六个数码,其计数规律是“逢十六进一”。十六进制数用下标16或H(Hexadecimal)表示,任意十六进制数的表示如式(1.2.4)所示。
(BD2.3C)16=B×162+D×161+2×160+3×16-1+C×16-2=11×162+13×161+2×160+3×16-1+12×16-2
例1.2.4 将十六进制数2A.8转换成十进制数。
解:(2A.8)16=2×161+10×160+8×16-1=32+10+0.5=(42.5)10
例1.2.5 将十六进制数4E2转换为十进制数。
(4E2)16=4×162+14×161+2×160=(1250)10
例1.2.6 将十六进制数F25.6转换为二进制数。
解:将每位十六进制数用4位二进制数代替,即得相应的二进制数,当第1位和最后1位为0时,0可以不写。
(F25.6)16=(1111 0010 0101.011)2
例1.2.7 将二进制数10110011011.01001转换为十六进制数。
解:从小数点分别向左右将4位二进制数分为1组,小数点左边不足4位的在前面加0,小数点右边不足4位的在后面加0,每4位分别用相应的十六进制数代替即可。
(101 1001 1011.01001)2=(0101 1001 1011.0100 1000)2=(59B.48)16
1.2.5 八进制
八进制是以8为基数的计数体制。八进制计数体制有0、1、2、3、4、5、6、7八个数码,其计数规律是“逢八进一”。八进制数用下标8或O(Octal)表示,任意八进制数的表示如式(1.2.5)所示。
(752.34)8=7×82+5×81+2×80+3×8-1+4×8-2
例1.2.8 将八进制数315.4转换为十进制数。
解:(315.4)8=3×82+1×81+5×80+4×8-1=(205.5)10
例1.2.9 将八进制数315.6转换为二进制数。
解:将每位八进制数用3位二进制数代替,即得相应的二进制数,当第1位和最后1位为0时,0可以不写。
(315.6)8=(011 001 101.110)2=(11 001 101.11)2
例1.2.10 将二进制数10110011011.01001进制数转换为八进制数。
解:从小数点分别向左右将3位二进制数分为1组,小数点左边不足3位的在前面加0,小数点右边不足3位的在后面加0,每3位分别用相应的八进制数代替即可。
(10110011011.01001)2=(010 110 011 011.010 010)2=(2633.22)8
几种数制之间的关系如表1.2.1所示。
表1.2.1 几种数制之间的关系对照表