首页 理论教育计算机应用基础案例教程-常用数制

计算机应用基础案例教程-常用数制

【摘要】:2,表示110.10101是二进制数。

1.2.1.1 认识数制

在日常生活中,人们常用十进制计数,即逢十进一。此外,人们也使用其他的数制,如二进制(两只筷子为一双)、十二进制(12个月为1年)、二十四进制(24小时为1天)、六十进制(60秒为1分)等等。这种逢几进一的计数法称为进位计数法。这种方法用一种规定的数字来表示任意的数。二进制使用0和1表示所有的数字;八进制使用0到7表示所有的数字;十进制使用0到9表示所有的数字;十六进制需要16个符号,0到9是前10个,再用A到F表示后6个,计算机就是用二进制数来存储和表示信息的。

表1-2-1中列出了十进制数0~16转换成其他进制的相对应数值。

表1-2-1 十进制数0~16转换成其他进制的相对应数值

(续表)

思考:不同的数制有没有相同的法则呢?

在采用进位计数的数字系统中可以遵循一个相同的法则,即如果只用R个基本符号,例如(0、1、2、3、…r-1)表示数值,则称其为基R数制,R称为该数制的基。如二进制,用2个符号表示其使用数字的数目,因此,二进制数的基数为2;同理,八进制数,用8个符号表示其使用数字的数目,因此,八进制数的基数为8。

假定数值N用m+k个自左向右排列的代码Di(-k≤i≤m-1)表示,即

N=Dm-1 Dm-2…D1 D0.D-1 D-2…D-k

其中,Di(-k≤i≤m-1)为该数制采用的基本符号,可取值0、1、2、3、…R-1,小数点位隐含在D0和D-1位之间,则Dm-1…D0为N的整数部分,D-1…D-k为N的小数部分。如果每一个Di的单位值都赋以固定值Wi,则称Wi为Di位的权,此时的数制称为有权的基R数制。

位权:任何一个数都是由一串数码表示的,每一位所表示的值除其本身的数值外,还与它所处的位置有关,由位置决定的值就叫权。对于十进制,第i位的权值就是10i。例如,十进制数5634,D0位的数值是4,位权是100(即1),D1位的数值是3,位权是101(即10),D2的数值是6,位权是102(即100)。

对于R进制数,第i位的权值可以表示为Ri,如:二进制数11011,D0位的数值是1,权值是20(即1),D1位的数值是1,权值是21(即2),D2位的数值是0,权值是22(即4),D3位的数值是1,权值是23(即8),D4位的数值是1,权值是24(即16)。

img

不同进制的表示方法

小明:不同的数制会有相同的字符,例如都有字符1和0,要怎么才能分辨出一个数字使用的是哪种进制呢?

老师:你说的这个问题的确存在,因此我们要想办法对不同数制进行区分。

1.2.1.2 不同数制的表示方法

同一种数字的组合在不同的进制里可能表示不同大小的数值,如十进制和十六进制里的10就表示不同的数值大小。所以在容易混淆的时候,我们需要对其表示的数制进行区分。通常我们使用以下两种方法。

1.下标法

用小括号将要表示的数括起来,然后在右括号外的右下角写上数制的基数R,一般我们用( )角标表示不同进制的数据。

如:十进制数用( )10表示,二进制数用( )2表示。

(12034.34)10,表示12034.34是十进制数。

(756)8,表示756是八进制数。

(110.10101)2,表示110.10101是二进制数。

2.字母法

在计算机里,通常用数字后面跟一个英文字母来表示该数的数制,这个英文字母也称为尾符。十进制数一般用D(Decimal)、二进制数用B(Binary)、八进制数用O(Octal)、十六进制数用H(Hexadecimal)来表示。

如:118D表示118是十进制数。

10110010B表示10110010是二进制数。

7630H表示7630是十六进制数。

关于数制的表示可以参照数制特征对照表,如表1-2-2所示。

表1-2-2 数制特征对照表

1.2.1.3各种数制之间的转换

小明:不同的数制之间有什么关系呢,它们之间可以互相转换么?

老师:不同数制都遵循一定的法则,只要我们掌握了这个法则,它们之间是可以相互转换的。

各种数制之间可以按照一定的规则相互转换。由于生活中常使用十进制,而计算机则使用二进制,所以下面围绕着这两种数制介绍它们与八进制和十六进制之间的转换方法。

1.其他进制转换为十进制

进位计数制的数是用位权来表示的,即数字排位顺序与表示的数值大小有关。位权是在一个数中相同数字在不同的位置上代表不同计数的次幂。任何一个数的值都可以用它的按位权展开式表示。

假如N是一个由m位整数和n位小数表示的p进制数,N写作:

Nm-1 Nm-2…N1 N0.N-1…N-n+1 N-n

其中,N0是个位,P是这个数字的基数,它可以是2、8、10、16等,于是按照位权展开式,N可以表示为

(N)p=Nm-1×Pm-1+Nm-2×Pm-2+…+N1×P1+N0×P0+N-1×P-1+…+N-n+1×P-n+1+N-n×P-n

例如:(3892.14)10可以表示为

(3892.34)10=3×103+8×102+9×101+2×100+3×10-1+4×10-2

在这个例子中,十进制数3892.34中有两个3,但它们在不同的位置上所代表的值是不相同的,在千位上代表的是3000,在十分位上代表的是0.3。

(1)二进制转换为十进制。二进制数有两个主要特点:

①有2个不同的数字状态:0、1。

②“逢二进一”的进位法,2是二进制数的基数。

(1101)2=1×23+1×22+0×21+1×20(每位上的系数只在0、1中取用)

=8+4+0+1

=(13)10

(10.01)2=1×21+0×20+0×2-1+1×2-2

=2+0+0+0.25

=(2.25)10

(2)八进制转换为十进制。八进制数有两个主要特点:

①采用8个不同的数字状态:0、1、2、3、4、5、6、7。

②“逢八进一”的进位法,8是八进制数的基数。

(4723)8=4×83+7×82+2×81+3×80(每位上的系数只在0~7中取用)

=2048+448+16+3

=(2515)10

(76.14)8=7×81+6×80+1×8-1+4×8-2

=56+6+0.125+0.0625

=(62.1875)10

(3)十六进制转换为十进制。十六进制数有两个主要特点:

①有16个不同的数字状态:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(其中后6个用字母代表的数字符号其值对应于十进制的10、11、12、13、14、15)。

②“逢十六进一”的进位法,16是十六进制数的基数。

(A3DF)16=A×163+3×162+D×161+F×160(www.chuimin.cn)

=10×4096+3×256+13×16+15×1

=(41951)10

(8EC.DB)16=8×162+E×161+C×160+D×16-1+B×16-2

=8×256+14×16+12×1+13×0.0625+11×16-2

=2048+224+12+0.8125+0.04296875

=2284.85546875

2.十进制转换为其他进制

将十进制转换为其他进制数需要分两步,要将整数部分和小数部分分开处理,处理完后再将它们合起来。

转换整数部分

将十进制整数部分转换成其他进制数的整数部分采用“除基取余法”。即将整数部分除以基数,得到一个商和一个余数;继续将商除以基数,又得到一个商和一个余数……直到商等于0为止。将每次得到的余数按倒序排列,就得到转换结果。

转换小数部分

与整数部分的转换方法相反,小数部分的转换采用乘法来计算,称为“乘基取整法”。即将小数部分乘以基数,得到一个积,记下整数部分。将积的小数部分继续乘以基数,直到积的小数部分为0。将每次得到的积的整数部分按顺序排列,即得到转换结果。

(1)十进制转换为二进制。例如:将十进制整数25转换成二进制整数的过程如下:

将余数按倒叙排列,得11001,即(25)10=(11001)2

例如:将十进制小数部分0.375转换成二进制小数的过程如下:

将得到的整数部分按顺序排列,得011,即(0.375)10=(0.011)2

(2)十进制转换为八进制。例如:将十进制数247转换为八进制数,过程如下:

将余数按倒叙排列,得367,即(247)10=(367)8

例如:将十进制小数部分0.90625转换成八进制小数,过程如下:

将得到的整数部分按顺序排列,得72,即(0.90625)10=(0.72)8

需要说明的是,有时候转换后的小数部分不能恰好做到积的小数部分为0,这时,则只能根据需要,保留需要的小数位数为止。

例如:将十进制数671.4463转换成八进制数。对于这个既有整数部分,又有小数部分的数字,我们需要将其整数部分和小数部分分开转换。过程如下:

整数部分671“除基取余”、倒序排列。

将余数按倒序排序,得1237,则十进制数671.4463的整数部分(671)10=(1237)8

小数部分0.4463“乘基取整”、顺序排列,保留6位小数。

转换过程可以看出,转换后的小数部分没有做到积的小数部分为0,但是根据要求,我们做到保留小数点后6位即可。我们将得到的整数部分按顺序排列,得344402,则十进制数671.4463的小数部分(0.4463)10=(0.344402)8。因此,

(671.4463)10=(1237.344402)8(保留6为小数)

(3)十进制转换为十六进制。例如:将十进制数231转换为十六进制数,过程如下:

将余数按倒叙排列,即(231)10=(E7)16

又如,将十进制小数0.17578125转换为十六进制小数,过程如下:

将整数部分按顺序排列,即(0.17578125)10=(2D)16

3.其他进制之间的转换

(1)二进制和八进制的转换。转换原则:每三位二进制数对应一位八进制数。

①二进制转换为八进制

“三位一并”法:从小数点开始分别往两边,先将二进制数的整数部分从右向左每三位分为一组,再将小数部分从左至右每三位分为一组,若整数和小数部分的最后一组不足三位时,则用0补足三位,每一组对应一位八进制数。

例如:将(1001111.0111)2转换为八进制数。过程如下:

先对(1001111.0111)2进行分组补0,可以将其写成(001 001 111.011 100)2,即为了满足每三位一组,在整数部分不足三位时,在整数前面补0,而在小数部分不足三位时,在小数后面补0。例题中带方框的数字0为补位所用。

然后,根据“三位一并”法进行转换。

所以,(1001111.0111)2=(117.34)8

②八进制转换为二进制

“一分为三”法:每位八进制数用三位二进制数代替。

例如:将(56.103)8转换为二进制数。过程如下:

所以,(56.103)8=(101110.001000011)2

(2)二进制和十六进制的转换。转换原则:每四位二进制对应一位十六进制数。

①二进制转换为十六进制

“四位一并”法:从小数点开始分别往两边,先将二进制数的整数部分从右向左每四位分为一组,再将小数部分从左至右每四位分为一组,若整数和小数部分的最后一组不足四位时,则用0补足四位,每一组对应一位十六进制数。

例如:将(11101001010.101101)2转换为十六进制数,可以将其写成

然后,根据“四位一并”法进行转换。

所以,(11101001010.101101)2=(74A.B4)16

②十六进制转换为二进制

“一分为四”法:每位十六进制数用四位二进制数代替。

例如:将(257.DB8)16转换为二进制数。过程如下:

所以,(257.DB8)16=(1001010111.110110111)2

(3)八进制和十六进制的转换。八进制转换为十六进制算法通常有两种方法:一种是先将八进制转换成二进制,再将二进制转换成十六进制;另一种是先将八进制转换成十进制,再将十进制转换成十六进制。假如八进制数为36.25,先用第一种方法,首先转换成二进制为011110.010101,再转换成十六进制为1E.54;第二种方法先将八进制转换成十进制为(30.28125)10,再将十进制转换成十六进制为1E.54。即

八进制→ 二进制→ 十六进制或 八进制→ 十进制→ 十六进制

例如:将八进制数(347)8转化为十六进制数,过程如下:

A:①先将其转化为二进制数:

②再将二进制数转换为十六进制数:

B:①先将其转化为十进制数:

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

=24+6+0.25+0.078125

=(30.328125)10

②再将十进制数转换为十六进制数:

(30.328125)10=(1E.54)16(通过分别计算整数部分和小数部分进行转换)

通过比较以上两种方法的转换,我们可以看出,八进制与十六进制之间的转换,借助二进制来转换的方法比较简便。