第2章 计算机中的数和数制

2.1 数制

2.1.1 数制的表示

1.计数制

数制也称为计数制,是指用一组固定的数字符号和统一的规则表示数的方法。对于任意r进制数N,可以用下式表示:

其中:

ai为数码,每一种进制数都有固定的数字符号,这个符号就是数码。

二进制有2个数码:0、1;

八进制有8个数码:0、1、2、3、4、5、6、7;

十进制有10个数码:0、1、2、3、4、5、6、7、8、9;

十六进制有16个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

i为数位,数位是指数码在一个数中所处的位置。

例如,十六进制数56.78从左到右的数位分别为:1、0、-1、-2。

r为基数,基数是指在某计数制中,每个数位上能使用的数码的个数。

二进制基数为2;

八进制基数为8;

十进制基数为10;

十六进制基数为16。

ri为权,权是基数的幂,这个幂次由数位决定。

二进制第i位上的权为2i

八进制第i位上的权为8i

十进制第i位上的权为10i

十六进制第i位上的权为16i

例如,十六进制数56.78从左到右每一位的权分别为:161、160、16-1、16-2

2.计算机中常用的计数制

在日常生活中,人们最常用的是十进制计数制。而在计算机中,为了便于数的存储和表示,使用的是二进制计数制。但是由于二进制数据书写和记忆不方便,在计算机系统中还常使用八进制和十六进制等计数制。计算机中常用计数制的属性见表2-1。

表2-1 计算机中常用计数制

说明:

· 为了区别所使用的数制,一般用以下两种书写格式表示:

① 用括号将数字括起,后面加数制区分,数制用下标的形式给出;

② 用后缀区分,二进制数、十进制数、八进制数、十六进制数的后缀分别为字母B(或b)、D(或d)、O(或o)或Q(或q)、H(或h)。

例如:十六进制数56.78可以表示成(56.78)16或56.78H;

   十进制数56.78可以表示成(56.78)10或56.78D。

· 汇编程序规定,使用首字符是字母的十六进制数时,前面需加0来表示。

例如:0B56.A8H、0FFH等。

· 在没有混淆的情况下,十进制数可以省略后缀D(或d)。

2.1.2 数制之间的转换

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

二进制数、八进制数和十六进制数转换为十进制数的方法是:“按权展开”。

【例2-1】 将1010.101B、23.4Q和56.78H转换成十进制数。

1010.101B=1×23+0×22+1×21+0×20+1×2-1+0×2-2+1×2-3=10.625D

23.4Q=2×81+3×80+4×8-1=19.5D

FA3.4H=15×162+10×161+3×160+4×16-1=4003.25D

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

把十进制数转换为其他数制数的方法很多,通常采用的方法有降幂法和乘除法。

(1)降幂法

假设要转换的十进制数为N

步骤1:找出最接近N并小于等于Nr进制位权值ri

步骤2:找到满足0≤Cr的最大数C,使得N-C×ririC即为转换结果(r进制数)第i位的位码ai

步骤3:计算N-C×ri,并用此值作为新的N值,即NN-C×ri

步骤4:i自减1,即ii-1,得到下一个位权值ri

重复步骤2~步骤4,直至N为0或转换结果达到所需精度。

(2)乘除法

采用乘除法把十进制数转换为二、八或十六进制数时,整数部分除以基数取余,直至商为0;小数部分乘以基数取整,直至积为整数或小数位数由精度确定。

【例2-2】 把十进制数117.8125转换成二进制数。

方法一:降幂法

小于该数117.8125的位权是64,32,16,8,4,2,1,0.5,0.25,0.125,0.0625,按下列过程求出每位的位码。

根据上述过程,可求得117.8125D=1110101.1101B。

方法二:乘除法

运算过程如下:

说明:

· 整数部分取余数时,先得到的数值是结果的低位,后得到的是结果的高位;

· 小数部分取整时,先得到的数值是结果的高位,后得到的是结果的低位。

根据上述过程,可求得117.8125D=1110101.1101B。

【例2-3】 把十进制数48956转换成十六进制数。

方法一:降幂法

小于该数48956的位权值是4096,256,16,1,按下列过程求出每位的位码。

根据上述过程,可求得48956D=BF3CH。

方法二:乘除法根据上述过程,可求得48956D=BF3CH。

3.其他数制之间的转换

(1)二进制数与八进制数之间的转换

由于八进制数以23为基数,所以3位二进制数对应1位八进制数,对应关系见表2-2。

表2-2 二进制数与八进制数对应表

二进制数转换为八进制数时,以小数点为界,整数部分向左,小数部分向右,每3位二进制数为一组,用1位八进制数表示;不足3位的,整数部分高位补0,小数部分低位补0。

八进制数转换为二进制数的过程与上述过程相反,把每位八进制数用3位二进制数表示即可。

【例2-4】 把数11010.101B转换为八进制数。

【例2-5】 把数34.56Q转换为二进制数。

(2)二进制数与十六进制数之间的转换

由于十六进制数以24为基数,所以4位二进制数对应1位十六进制数,对应关系见表2-3。

表2-3 二进制数与十六进制数对应表

二进制数转换为十六进制数时,以小数点为界,整数部分向左,小数部分向右,每4位二进制数为一组,用1位十六进制数表示;不足4位的,整数部分高位补0,小数部分低位补0。

十六进制数转换为二进制数时的过程与上述过程相反,把每位十六进制数用4位二进制数表示即可。

【例2-6】 把二进制数11010.101B转换为十六进制数。

【例2-7】 把十六进制数56.78H转换为二进制数。

2.1.3 二进制数的运算

1.算术运算

加法规则:逢二进一。即:

0+0=0 1+0=1 0+1=1 1+1=10

减法规则:借一当二。即:

0-0=0 1-0=1 0-1=1 1-1=0

乘法规则:任何数乘以0得0,1乘以任何数得该数。即:

0×0=0 0×1=0 1×0=0 1×1=1

除法规则:0除以任何数得0,任何数除以1得该数,除数不得为0。即:

0÷1=0 1÷1=1

2.逻辑运算

与(AND):0∧0=0 0∧1=0 1∧0=0 1∧1=1

或(OR):0∨0=0 0∨1=1 1∨0=1 1∨1=1

非(NOT):

异或(XOR):0⊕0=0 0⊕1=1 1⊕0=1 1⊕1=0

【例2-8】 多位二进制数的算术运算。

10101010B+01011101B=100000111B

10101010B-01011101B=01001101B

【例2-9】 多位二进制数的逻辑运算。

10101010B∧01011101B=00001000B

10101010B∨01011101B=11111111B

10101010B⊕01011101B=11110111B