第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并小于等于N的r进制位权值ri;
步骤2:找到满足0≤C<r的最大数C,使得N-C×ri<ri,C即为转换结果(r进制数)第i位的位码ai;
步骤3:计算N-C×ri,并用此值作为新的N值,即N←N-C×ri;
步骤4:i自减1,即i←i-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