1、第1章预备知识1.1 数与数制1.2 算术逻辑运算1.3 符号数的表示方法1.4 补码的运算1.5 数的定点表示和浮点表示1.6 BCD码1.7 ASCII码习题第1章预备知识1.1 数数 与与 数数 制制1十进制记数法十进制记数法在十进制记数中,用0,1,2,9这10个符号来表示数量,无论多大的数,都是用这10个符号的组合来表示的。正是由于表示数量的符号有10个,因此称为十进制记数法。根据同样的法则,也可以表示十进制小数,小数点的右边各位的权为10-1,10-2,10-3,例如,十进制数275.368可以用上述法则写成:(275.368)10=2102+7101+5100 +310-1+61
2、0-2+810-3第1章预备知识2二进制记数法二进制记数法 二进制记数法用来表示数量的符号只有两个,就是0和1。二进制数中的任何一个0或1称为比特(bit)。例如,二进制数110101可以表示为(110101)2=125+124+023+122+021+120第1章预备知识3二进制数与十进制数的相互转换二进制数与十进制数的相互转换1)二进制数转换成十进制数如上所述,只要将二进制数的每一位乘上它的权,然后加起来就可以求得二进制数的十进制数值。例如,二进制数101101.11换算成十进制数为(101101.11)2=125+024+123+122+021+120+12-1+12-2=(45.75)
3、10第1章预备知识2)十进制数转换成二进制数十进制数转换为二进制数的方法分两步进行,分别处理整数部分和小数部分。一个十进制整数的二进制转换方法是“除2取余”,而一个十进制小数的二进制转换方法是“乘2取整”。若一个十进制数既包含整数部分又包含小数部分,它的二进制转换就是将它的整数部分和小数部分用上述方法分别进行转换,最后将转换好的两部分结合在一起形成要转换的二进制数。第1章预备知识4八进制记数法八进制记数法在八进制记数中,用0,1,2,7这8个符号来表示数量,无论多大的数,都是用这8个符号的组合来表示的。现在,八进制记数用得很少,本书基本上不用。5十六进制记数法十六进制记数法在十六进制记数中,用
4、0,1,2,9和A,B,C,F等16个符号来表示数量,即表示数量的符号有16个,故称为十六进制记数法。第1章预备知识1二进制加法二进制加法 二进制加法与十进制加法类似,所不同的是,二进制加法中是“逢二进一”,其法则为0+0=0 1+0=1 0+1=1 1+1=0 有进位1.2 算术逻辑运算算术逻辑运算第1章预备知识2二进制减法二进制减法在二进制减法中,同样有如下法则:0-0=0 1-0=1 1-1=0 0-1=1 有借位当不够减时需要借位,高位的1等于下一位的2,即“借一当二”。第1章预备知识3二进制乘法二进制乘法二进制乘法与十进制乘法是一样的。但因为二进制数只由0和1构成,因此,二进制乘法更
5、简单。其法则如下:00=010=001=011=1第1章预备知识4二进制除法二进制除法二进制除法是乘法的逆运算,其方法与十进制除法是一样的,而且二进制数仅由0,1构成,做起来更简单。5二进制与二进制与二进制与又称为逻辑乘,其法则为00=0;01=0;10=0;11=1第1章预备知识6二进制或二进制或二进制或又称为逻辑加,其法则为00=0;01=1;10=1;11=17二进制异或二进制异或二进制异或的法则为00=0;01=1;10=1;11=0第1章预备知识1.3 符号数的表示方法符号数的表示方法 表示一个带符号的二进制数通常有4种方法。1原码法原码法 原码法的规则就是符号与数值连续排列,符号放
6、在最高位,且用0表示正数,用1表示负数,其后跟着数值。第1章预备知识2反码法反码法在计算机的早期,曾采用反码法来表示带符号的数。对于正数,其反码与其原码相同。对于负数,用相应正数的原码各位取反来表示,包括将符号位取反,取反的含义就是将0变为1,将1变为0。例如,(-45)10的反码表示就是将上面(+45)10的二进制数各位取反:(-45)10=(11010010)2第1章预备知识3补码法补码法在计算机中,符号数最常用的是补码(对2的补码)形式。用补码法表示带符号数的法则是:正数的表示方法与原码法和反码法一样;负数的表示方法为该负数的反码加1。例如,(+4)10的补码表示为(00000100)2
7、,而(-4)10用补码表示时,可先求其反码表示(11111011)2,而后再在其最低位加1,变为(11111100)2。这就是(-4)10的补码表示,即(-4)10=(11111100)2。第1章预备知识4移码法移码法在计算机的浮点数表示中会用到移码。移码可以理解为:移码就是在补码的基础上偏移多少数值。偏移的数值可以人为定义。例如,对n位整数来说,经常使用的偏移量为2n-1。若令n为8,则偏移量为27,即128。也就是说在补码的基础上加上128便成为移码。第1章预备知识1.4 补补码码的的运运算算补码加减法的运算法则为X+Y补=X补+Y补-X补=-X补X-Y补=X补+-Y补=X补-Y补由这些法
8、则可见,和的补码可用补码求和实现;而差的补码可通过将减数求补再与被减数相加实现。也就是说在补码情况下,利用加法器可完成减法运算。第1章预备知识在计算机中,一般都不设置专门的减法电路。遇到两个数相减时,处理器就自动地将减数取补,而后将被减数和减数的补码相加来完成减法运算。这里要强调的是,当两个同符号的数相加(或者是异符号数相减)时,若相加(或相减)的结果超出了所规定的数值范围,则会发生溢出。一旦发生溢出,其结果肯定是错误的。第1章预备知识可以看到,例中两个正数相加的结果为一负数,结果显然是荒谬的。产生错误的原因就是溢出。由于本例中是用8位二进制编码表示带符号的数,若用它表示整数,8位补码所能表示
9、的数值范围为-128+127。结果超出这一范围就产生错误。在将来的编程中,可用增加表示数值编码的位数的方法来消除溢出的发生。上面例子中若用多于8位的二进制编码表示那两个带符号的数,再相加时肯定不会产生溢出。第1章预备知识再来看两个负数(10001000)2和(11101110)2的相加情况。10001000+1110111001110110两负数相加产生溢出的情况读者可以自行分析。第1章预备知识1.5.1 数的定点表示法数的定点表示法所谓定点数就是小数点固定不变的数。小数点的位置通常有两种约定,即定点整数(相当于小数点在最低有效位之后)和定点小数(相当于小数点在最高有效位之前)。1.5 数的定
10、点表示和浮点表示数的定点表示和浮点表示第1章预备知识如前所述,对于表示带符号数,符号总是放在最高位。若表示带符号数的字长为n位,则定点整数原码、补码的表示范围分别为定点整数原码的表示范围:-(2n-1-1)+(2n-1-1)定点整数补码的表示范围:-(2n-1)+(2n-1-1)若用n位字长表示小数,则定点小数原码、补码的表示范围分别为定点小数原码的表示范围:-(1-2-(n-1)+(1-2-(n-1)定点小数补码的表示范围:-1+(1-2-(n-1)第1章预备知识1.5.2 数的浮点表示法数的浮点表示法定点表示法比较简单,要么纯整数,要么纯小数。所能表示的数值范围也比较小,运算中很容易因超出
11、范围而溢出。为克服这些缺点,引入了数的浮点表示法。在十进制数中,一个数可以写成多种表示形式。第1章预备知识在浮点表示法中,阶码通常为带符号的整数,尾数为带符号的纯小数。浮点数的表示格式如下:数 符 阶 码 尾 数 第1章预备知识很明显,浮点数的表示不是唯一的。当小数点的位置改变时,阶码也随着相应改变,可以用多种形式来表示同一个数。浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度则主要由尾数来决定。为了充分利用尾数来表示更多的有效数字,通常采用规格化浮点数。规格化就是将尾数限定在小于1且大于等于0.5之间。第1章预备知识当尾数用补码表示时,若尾数M0,则尾数规格化应为M=0.1。其中可为
12、0,也可为1。若尾数M0,规格化应满足-1/2补M补-1补,则尾数规格化应为M=1.0。其中可为0,也可为1。第1章预备知识1.5.3 工业标准工业标准IEEE754IEEE754是由IEEE制定的有关浮点数的工业标准,被广泛采用。该标准的表示形式如下:(-1)S2E(b0b1b2b3bp1)其中:(-1)S为该浮点数的数符,当s为0时表示为正数,s为1时为负数;E为指数,用移码表示;(b0b1b2b3bp1)为尾数,共P位,用原码表示。第1章预备知识目前计算机中使用的三种形式的IEEE754浮点数格式列于表1.1中。在IEEE754标准中,特别要说明的就是尾数在规格化时的处理。也就是说在规格
13、化的过程中必须使b0为1,而且小数应当在位置上,是隐含的。规格化时将b0去掉,也是隐含的。这相当于使尾数增加了一位,在使用时应注意到这种情况。第1章预备知识表表1.1 三种形式的三种形式的IEEE754浮点数格式浮点数格式参 数 单精度浮点数 双精度浮点数 扩充精度浮点数 浮点类字长 32 64 80 尾数长度 P 23 52 64 符号位 S 1 1 1 指数长度 E 8 11 15 最大指数 127 1023 16383 最小指数 126 1022 16382 指数偏移量 127 1023 16383 可表示的实数范围 10381038 1030810308 104932104932 第1
14、章预备知识为了说明IEEE754浮点数的应用,现举例如下:现欲利用IEEE754标准将数176.0625表示为单精度浮点数。首先将该十进制数转换成二进制数:(176.0625)10=(10110000.0001)2对上面的二进制数规格化:10110000.0001=1.0110000000127第1章预备知识这就保证了使b0为1,而且小数点在位置上。将b0去掉并扩展为单精度浮点数所规定的23位尾数:01100000001000000000000。然后,再来求取阶码。现指数为7,而单精度浮点数规定指数的偏移量为127(请注意不是前面移码描述中所提到的128),即在指数7上加127。那么,E=7+
15、127=134,则指数的移码表示为10000110。最后,可得到(176.0625)10的单精度浮点数表示如下:0 10000110 01100000001000000000000第1章预备知识转换十进制数为其等值的二进制数称之为编码。前面所提到的二进制数称为纯二进制码。计算机只能识别用高低电平表示的0或1,对计算机来说,用纯二进制码是十分方便的。但人们则更习惯于十进制数。为此,人们发明了用二进制编码来表示的十进制数,它有多种表示形式,在此只介绍以下两种表示方法。18421码码BCD码中的8421码用4位二进制数表示一位十进制数,它们的对应关系如表1.2所示。1.6 BCD码码第1章预备知识表
16、表1.2 8421码与十进制数的对应关系码与十进制数的对应关系十进制数 8421 码 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 第1章预备知识由表1.2可以看到,这种形式的BCD码二进制各位的权值分别是8421。同时,在这种BCD码表示法中,剩下的6种四位编码,从1010到1111全都是非法的。根据上述说明可以看到,一个十进制数能够很方便地用BCD码来表示。例如,十进制数834用BCD码表示为(834)10=(1000 0011 0100)BCD只要熟记十进制数09与BCD码的对应关系,则它们之间
17、的相互转换是十分方便的。例如:(0110 1001 0101.0010 0111 1001)BCD=(695.279)10第1章预备知识2余余3码码余3码也是用4位二进制编码来表示一个十进制数的。但这是一种无权码,其表示形式如表1.3所示。第1章预备知识表表1.3 余余3码与十进制数的对应关系码与十进制数的对应关系十进制数 余 码 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 8 1001 7 1010 8 1011 9 1100 第1章预备知识ASCII码是美国标准信息交换码的简称,现在为各国所广泛采用。通常,ASCII码由7位二进制编码来表示,用于微处
18、理机与它的外部设备之间进行数据交换以及通过无线或有线进行数据传送。1.7 ASCII 码码第1章预备知识代表上述字符或控制功能的ASCII码是由一个4位组和一个3位组构成的,形成7位二进制编码,其格式为3 位组 4 位组 第1章预备知识 根据ASCII码的构成格式,可以很方便地从有关的ASCII表中查出每一个字符或特殊控制功能的编码。例如,大写英文字母A,从表中查出其3位组为(100)2,4位组为(0001)2,故构成字母A的ASCII编码为(1000001)2或(41)16。第1章预备知识习习 题题 1.1 将下列二进制数转换为十进制数:(1)10010110 (2)10111100 (3)
19、110110101.2 将下列二进制小数转换为十进制数:(1)0.10111 (2)0.111101 (3)0.1101011.3 将下列十进制数转换为二进制数:(1)254 (2)1039 (3)141第1章预备知识1.4 将下列十进制小数转换为二进制小数(取小数点后5位):(1)0.75 (2)0.102 (3)0.66671.5 将下列十进制数转换为二进制数:(1)100.25 (2)680.375 (3)1033.68751.6 将下列二进制数转换为十进制数:(1)10010110.1011 (2)10111100.001011 第1章预备知识1.7 将下列二进制数转换为八进制数:(1
20、)10010110 (2)10111100 (3)110110101.8 将下列八进制数转换为二进制数:(1)763 (2)1234 (3)65671.9 将下列二进制数转换为十六进制数:(1)10010110101101 (2)10111100110101 (3)1101101011100001第1章预备知识1.10 将下列十六进制数转换为二进制数:(1)ABC (2)7FA5.3E8 (3)FEA5.DCB1.11 将下列二进制数转换为BCD码:(1)10010110.101 (2)10111100.11101 1.12 将下列十进制数转换为BCD码:(1)1023 (2)688 (3)123.34第1章预备知识1.13 写出下列字符的ASCII码:A 9 =!1.14 对于下列十进制数,用8位二进制数分别写出它们的原码、反码和补码:(1)+99 (2)-99 (3)+127(4)-127 (5)+0 (6)-0第1章预备知识1.15 8位二进制数原码所能表示的数值范围是 。8位二进制数反码所能表示的数值范围是 。8位二进制数补码所能表示的数值范围是 。1.16 16位二进制数原码、反码、补码所能表示的数值范围各是多少?