计算机数学
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

0.1 数的进制

十进制是我们熟悉的计数系统,它用十个符号0,1,2,3,4,5,6,7,8,9来表示整数。在表示一个整数时,符号的位置(也就是我们过去常说的位置值原则)是重要的:从右边开始,第一个符号表示1(1=100)的个数,第二个符号表示10(10=101)的个数,第三个符号是100(100=102)的个数,…,第n个符号代表10n-1的个数,等等。例如,73854=7× 104+3×103+8×102+5×101+4×100。我们把系统所基于的那个数(十进制系统就是10)称为基数。

计算机科学要用到10以外的基数。比如,二进制就是以2为基数的计数系统。下面我们讨论二进制系统。

在二进制数字系统(基数为2)中,只用两个符号0和1来表示一个整数。从右边开始,第一个符号表示1(1=20)的个数,第二个符号表示2(2=21)的个数,第三个符号是4(4=22)的个数,第四个表示8(8=23)的个数,…,第n个位置的符号表示2n-1的个数。比如,二进制数1010111112可以化为十进制数

1·28+0·27+1·26+0·25+1·24+1·23+1·22+1·21+1·20=351

如果不知道使用的是什么数制系统,一个数字所表示的意义将是含混的。比如,101101在十进制中表示某个数,在二进制中则表示完全不同的另一个数。通常情况下,读者能从上下文知道所用的是什么数制。但是,如果我们要完全地明确表示一个数,就把基数作为下标来标记所用的数制系统——十进制用下标10,二进制用下标2,等等。例如,二进制的101101用1011012来表示,十进制的101101用10110110来表示。

例0.1.1

二进制数1011012表示此数由一个1、没有2、一个4、一个8、没有16、一个32等组成。它可以表示为

1011012=1·25+0·24+1·23+1·22+0·21+1·20

用十进制计算上面式子的右边,得出

此例告诉我们,如何把一个二进制数转换为一个十进制数。

下面考虑相反的问题——把一个十进制数转换为一个二进制数,例如,要把十进制数91转换为二进制数。首先我们用91除以2,得到

再把45除以2,得

把上式的45代入式(0.1.1),得

再把22除以2,得

22=2·11

将它代入式(0.1.3),得

再把11除以2,得

11=2·5+1

将它代入式(0.1.4),得

再把5除以2,得

5=2·2+1

将它代入式(0.1.5),得

上面的计算表明,当N(或商)逐次被2除时所得的余数,就给出了N的二进制表示的各个位置上的数。在(0.1.1)式中,第一次被2除的余数就是最低位(1的个数),在(0.1.2)式中,第二次被2除的余数就是代表2的个数的位,等等。

例0.1.2

把十进制131写为二进制。

下面的计算表明,逐次被2除,余数就是从右边开始的各个二进制位。

直到所除得的商数为0时,停止计算。第一次被2除的余数就是最低位(1的个数),第二次被2除的余数就是表示2的个数的位,等等。也就是说,将所得余数从下往上排列为从左向右的形式,我们就得出:

13110=100000112

十进制数相加的方法也可以用于二进制数相加,但是,我们要把十进制加法表用二进制加法表代替,见表0.1.1。

表0.1.1

在十进制中,1+1=2,且210=102。所以,在二进制中,1+1=10。

例0.1.3

把二进制数10011011和1001011相加。

我们把问题写为

与十进制加法一样,我们从右边开始,把1和1相加,其和为102,于是我们写出0并有进位1。此时计算成为

下面,把三个1相加,得112写出1,还有进位1。此时,计算成为

继续此法,我们得出

在计算机系统中,重要的数制还有八进制和十六进制的系统。下面我们讨论十六进制系统,而把八进制系统作为练习题。

在十六进制系统中,表示整数的符号是:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E和F共16个字符,其中的符号A~F代表十进制数的10~15(一般来说,N进制的系统,需要N个不同的符号来表示0,1,2,…,N-1)。在表示一个整数时,从右边开始,第一个符号表示1的个数,第二个符号表示16的个数,第三个符号表示162的个数,…,第n个位置的符号表示16n-1的个数,等等。

例0.1.4

把十六进制数B4E转换为十进制数。

我们有

类似于二进制的讨论,要把一个十进制数转换为十六进制数,我们逐次把它(或者商)除以16,所得的余数就给出了十六进制的各个数位上的符号。

例0.1.5

把十进制数20385转换为十六进制数。

用20385(或商)依次除以16,余数就是从右边开始的各个十六进制位上的符号。

一直到商数为0时,停止计算。第一次被16除的余数就是最低位(1的个数),第二次被16除的余数就是16的位置上的数,如此等等,我们得出:

2038510=4FA116

下面的例子表明,我们可以用十进制数相加的方法来进行十六进制数的相加。

例0.1.6

把十六进制数84A和42EF相加。

问题可以写为

我们从最右边开始,把F和A相加。由于F是1510,A是1010,所以

下面我们把1,4和E相加,满16进1,写出余下的3,得1316

继续照此进行,得到

例0.1.7

将二进制数转换成八进制数或十六进制数的方法是:从最低位开始向左边按每3位(转换成八进制数)或每4位(转换成十六进制数)分组,最后不满3位或4位的,则填0补充,再将每组用对应的八进制数或十六进制数代替,即可得相应的八进制数或十六进制数。

把二进制1110110100转换成八进制。

二进制1,110,110,100 每3位一组

001,110,110,100最高位补0

八进制1 6 6 4 结果

于是,11101101002=16648

把二进制1110110100转换成十六进制。

二进制11,1011,0100 每4位一组

0011,1011,0100最高位补0

16进制3 B 4 结果

于是,11101101002=3B416

例0.1.8

将八进制数或十六进制数转换成二进制数的方法是:将八进制数和十六进制数的每一位用对应的3位或4位二进制数来表示即可(参见表0.1.2)。

把八进制327转换成二进制。

八进制3 2 7

二进制011010 111

于是,3278=0110101112

把十六进制7A转换成二进制。

十六进制7 A

二进制01111010

于是,7A16=11110102

表0.1.2

习题0.1

1.把下列各二进制数改写为十进制数和十六进制数。

(1)100101

(2)101011

(3)10011011

(4)1100000

2.把各十进制数表示为二进制数和十六进制数。

(1)34

(2)61

(3)403

(4)1024

3.把下列二进制数相加。

(1)1011+1110

(2)101011+1101

(3)110110+101101

(4)101101+110101

4.把十六进制数表示为十进制数和二进制数。

(1)3A

(2)1E9

(3)3F7C

(4)A03

5.把下列各十六进制数相加。

(1)4A+B4

(2)49F7+C6E

(3)3B9C+9E2D

6.2010是一个二进制数吗?是一个十进制数吗?是一个十六进制数吗?

7.1001010是一个二进制数吗?是一个十进制数吗?是一个十六进制数吗?

8.完成表0.1.3所列的八进制加法表。

表0.1.3

9.把下列八进制数转化为十进制数、二进制数、十六进制数。

(1)73

(2)7654

(3)632

(4)207