1.2 数制

数制是计数体制(即计数的方法)的简称,有累加计数制和进位计数制两种。累加计数制是原始的计数方法,计多大的数就要使用与所计数目个数相等的各不相同的计数符号,很不方便。比较方便的计数方法是进位计数制,本章所述数制即指进位计数制。常用的进位计数制有十进位计数制(十进制)以及二进制、八进制、十六进制。

1.2.1 数制的基本知识

在介绍各种数制之前,首先介绍数制的基础知识。

1.基本数码

基本数码是指计数制中使用的基本数字符号,简称数码。例如,十进制中的0、1、2、3、4、5、6、7、8、9便是数码。

2.基数(R)

计数制中所使用的数码的个数称为基数,亦称底数。基数常用R表示,在十进制中R=10。在基数为R的数制中,每一个数位上可以使用的数码包括0在内共有R个,最大数码是R-1,而没有R,因此计数时当某位数计到R时,则在该位记作0,并向高位进一,即逢R进一,故基数为R的计数制称为R进制计数制。

3.数位(i)

在由一串数码构成的数中,数码所在的位置称数位。数位的排序用i表示,i的计算以小数点为界,向左依次为第0位、第1位……向右依次为第-1位、第-2位……例如,在十进制数123.45中,3是第0位数,2是第1位数,4是第-1位数等。

4.位权(Weight)

位权亦称权值。在进位计数制的由一串数码构成的数中,各个数位上的数码所表示的数值的大小不但和该数码本身的大小有关,而且还和该数码所处的数位有关。例如,在十进制数44 中,十位数4表示4×101,个位数4表示4×100。可见,不同的数位赋予该位上的数码以不同的表示数的大小的权力。我们把数位上的数码在表示数时所乘的倍数称为该数位的位权。

在R进制数中,第i位数位的权值用Wi表示,Wi=Ri。其中,R是基数,i是数位的位数。例如,十进制数的第0位(个位)、第1位、第-1位的位权分别为100、101、10-1

在由一串数码表示的数中,相邻两个数位中左边数位的位权是右边的R倍。

5.数的表示方式

在进位计数制中,数的表示方式有位置记数法、按权展开式、和式3种。

以十进制数123.45为例,分别可以表示为

  (N)10=123.45····························································位置计数法

    =1×102+2×101+3×100+4×10-1+5×10-2·················按权展开式

    =Di×10i·······················································和式

其中,(N)10的脚标10表示N为十进制数。二进制、八进制、十进制、十六进制数分别用脚标2、8、10、16或B、O、D、H表示。位置记数法是用一串数码来表示数,也称并列记数法;按权展开式是用多项式来表示一个数,又称多项式表示法,多项式中的各个乘积项由各个数位上的数码加权(即乘上权值)构成;和式则是把按权展开式表示为 ∑的形式,Di表示第i位数位上的十进制数码,10i为第i位的权值。

对于任意一个R进制数(N)R,可以用三种方式表示为

  (N)R=am-1am-2…a1a0.a-1a-2…a-n································· 位置计数法

    =am-1×Rm-1+am-2×Rm-2+…+a1×R1+a0×R0+

     a-1×R-1+a-2×R-2…a-n×R-n·····························按权展开式

    =ai×Ri······················································和式

式中,am-1,am-2,…,a-n分别为第m-1,m-2,…,-n位上的数码;R为基数;m和n分别为整数部分和小数部分的位数;i为数位的序号。

1.2.2 常用数制

人们通常采用的数制有十进制、二进制、八进制和十六进制。下面将分别介绍二进制、八进制和十六进制。

1.二进制(Binary)

数码:0、1;

基数:R=2;

第i位的权值:Wi=2i

表示方式示例:

        (101.01)2=1×22+0×21+1×20+0×2-1+1×2-2

            =Bi×2i

2.八进制(Octal)

数码:0、1、2、3、4、5、6、7;

基数:R=8;

第i位的权值:Wi=8i

表示方式示例:

        (25.6)8=2×81+5×80+6×8-1

           =Oi×8i

3.十六进制(Hexadecimal)

数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;

基数:R=16;

第i位的权值:Wi=16 i

其中,数码A、B、C、D、E、F依次与十进制数10、11、12、13、14、15等值,但A、B、C、D、E、F在十六进制中是1位数。

表示方式示例:

        (12D.23)16=1×162+2×161+13×160+2×16-1+3×16-2

             =Hi×16i

需要说明的是,在数字技术中用得最多的是二进制数。这是因为二进制中只有两个数码,很容易用高低电平来表示;如果采用十进制,则需要用10个不同的状态来表示十进制中10个不同的数码,很不容易。此外,二进制数的运算也比较简单,因此机器数都用二进制数表示。但是用二进制表示的数往往很长,不便于书写和记忆,相对而言,八进制、十六进制数的书写和记忆比较方便,而且和二进制数之间的转换也很方便,因此,又常用八进制和十六进制数作为二进制数的缩写形式用于书写、输入和显示。

1.2.3 数制转换

下面将介绍各种数制间的转换方法。

1.二(八、十六)进制数→十进制数

将二进制、八进制、十六进制数转换成十进制数,只要把原数写成按权展开式再相加即可。

例1.2.1分别将(101.01)2、(74.5)8、(3C.A)16转换成十进制数。

解:(101.01)2=1×22+0×21+1×20+0×2-1+1×2-2=(5.25)10

  (74.5)8=7×81+4×80+5×8-1=(60.625)10

  (3C.A)16=3×161+12×160+10×16-1=(60.625)10

2.十进制数→二进制数

十进制数转换成二进制数只需将整数部分和小数部分分别转换成二进制数,再将转换结果连接在一起即可。

整数的转换用“除2取余法”:将十进制数除以基数2,得商和余数,取下余数作为目标数制数的最低位数码;将所得的商再除以基数又得商和余数,取下余数作为目标数制数的次低位数码……如此连续进行,直至商为0,余数小于目标数制的基数2为止,末次相除所得的余数为目标数制数的最高位数码。

小数的转换用“乘2取整法”:将被转换的十进制小数乘以目标数制的基数2,取下所得乘积中的整数作为目标数小数的最高位;再将乘积中的小数部分乘以基数 2,取下乘积中的整数作为目标数小数的次高位……如此反复进行,直到乘积的小数部分为0或达到所需精度为止。各次相乘所得的整数即可构成目标数的小数,第一次相乘所得的整数为小数的最高位,末次相乘所得的整数为小数的最低位。

例1.2.2将(60.625)10转换成二进制数。

解:(1)对整数60进行“除2取余”

所以,(60)10=(111100)2

(2)对小数0.625进行“乘2取整”

所以,(0.625)10=(0.101)2

(3)整数和小数部分的转换结果连接在一起

(60.625)10=(111100.101)2

采用乘基数取整法将十进制小数转换成二进制、八进制、十六进制小数时,可能出现多次相乘后乘积的小数部分仍不为0的情况。这时应按照所需的精度来确定位数。

一个R进制n位小数的精度为R -n,如(0.95)10的精度为10-2

例1.2.3(0.39)10=( ? )2,要求精度达到1%。

解:设转换后的二进制数小数点后面有n位小数,则其精度为2-n,由题意可知

2-n≤1%

解得n≥7,取n=7。

所以,(0.39)10=(0.0110001)2

3.二进制数和十六进制数之间的相互转换

十六进制数的进位基数是 16=24,因此二进制数和十六进制数之间的转换非常简单。将二进制数转换成十六进制数时,整数部分从低位起每4位分成一组,最高位一组不足4位时以零补足,小数部分从高位起每4位分成一组,最低位一组不足4位时也以零补足,然后,依次以1位16进制数替换4位二进制数即可。

例1.2.4将二进制数101101.01001转换成十六进制数。

解:(101101.01001)2=(0010 1101.0100 1000)2=(2D.48)16

将十六进制数转换成二进制数时,其过程正好相反,即用4位二进制数替换1位16进制数。

例1.2.5将十六进制数(23A.D)16转换成二进制数。

解:(23A.D)16=(0010 0011 1010.1101)2=(1000111010.1101)2

4.二进制数和八进制数之间的相互转换

八进制数的进位基数是8=23,将二进制数转换成八进制数时,整数部分从低位起每3位分成一组,最高位一组不足3位时以零补足,小数部分从高位起每3位分成一组,最低位一组不足3位时也以零补足,然后,依次以1位8进制数替换3位二进制数即可。

例1.2.6将二进制数10101.00111转换成八进制数。

解:(10101.00111)2=(010 101.001 110)2=(25.16)8

将八进制转数换成二进制数时,用3位二进制数依次替换1位8进制数即可。

例1.2.7将八进制数(27.3)8转换成二进制数。

解:(27.3)8=(010 111.011)2=(10111.011)2

5.十进制数转换成十六进制数、八进制数

十进制数转换成十六进制数和八进制数时,通常采用的方法是首先把十进制数转换成二进制数,然后再把得到的二进制数转换成十六进制数或八进制数。所用到的转换方法上面均已介绍过。

例1.2.8将十进制数215.625转换成十六进制数和八进制数。

解:(215.625)10=(11010111.101)2=(D7.A)16=(327.5)8