考研帮 > 数学 > 每日一练

2.2 点数的表示和运算

2.2.2 定点数的运算

  定点数的运算有多种,主要有定点数的移位运算,定点数的加/减运算,定点数的乘/除运算等。
  1.定点数的移位运算
  定点数的移位运算也称为移位操作。左移或右移n位相当于乘以或除以2n。当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。机器数字长往往是固定的,当机器数左移或右移时,必然会使其低位或高位出现空位。对空出的空位应该添补0还是1与机器数采用有符号数还是无符号数有关。有符号数的移位称为算术移位,无符号数的移位称为逻辑移位。
  (1)算术移位:特点是移位前后符号位保持不变,只对数值部分进行移位操作。对于正数,由于其原码、反码、补码及其真值相等,故移位后出现的空位均以0添补。对于负数的原码不论左移或右移,添补代码均为0,这是因为负数的原码其数值部分与真值相同。算术运算是对真值操作。在计算机中对真值的机器数操作后,应该保证真值的一致性和运算结果的正确性。
  对于负数的反码不论左移或右移,添补代码均为1,这是由于负数的反码其各位除符号位外与负数的原码正好相反。反码数值部分填补代码1,相当于“真值”的数值部分填补代码0。
  对于负数的补码,当对其由低位向高位找到第一个1时,在此1的左边的各位(高位)均与对应的反码相同,而在此1右边的各位(低位,包括此1在内)均与对应的原码相同。右移时空位出现在高位,则添补的代码应与反码相同,即添1;左移时空位出现在低位,即添0。
  (2)逻辑移位:逻辑移位的规则是逻辑左移时,高位移出,低位添0;逻辑右移时,低位移出,高位添0。
  2.原码定点数的加/减运算
  原码加减法比较复杂。当原码进行加减运算时,符号位需要单独处理进行,不参加运算,只有两数的绝对值参加运算。但在运算的过程中,符号位的作用很重要,因为运算首先需要判断参加运算的两个操作数的符号,由其符号位决定所进行的运算是相加还是相减,然后根据两个操作数绝对值的大小决定结果的符号。
  3.补码定点数的加/减运算
  补码的加减法运算比较简单,采用补码加减法运算,可将“正数加负数”的操作,转化为“正数加正数”的操作。一般计算机采取补码进行加减法运算。补码加法的基本公式为:
  整数:[A]+[B]=[A+B] mod 2n+1
  小数:[A]+[B]=[A+B] mod 2。
  对于减法,因为A-B=A+(-B),则[A-B]=[A+(-B)],由补码加法基本公式可得:
  整数:[A-B]=[A]+[-B] mod 2n+1
  小数:[A-B]=[A]+[-B] mod 2。
  补码加减运算规则如下:
  参加运算的两个操作数均用补码表示;
  符号位作为数的一部分参加运算;
  若做加法,则两数直接相加,若做减法,则将被减数与减数的机器负数相加;
  运算结果仍用补码表示。
  4.补码定点数加/减运算的溢出判断
  溢出是运算过程中常出现的一种现象,如在定点小数机器中,数的表示范围为|X|<1。在运算中如果出现大于1的现象,就称为溢出。另外,在补码运算时,有时会遇到这样的情况:两个正数相加,而结果的符号位却为1(结果为负);两个负数相加,而结果的符号位却为0,即结果为正,这明显是不对的,这种情况的出现同样是因为发生了溢出。下面我们通过一个字长为4的例子来描述溢出的情况。
  已知X=+1011=11,Y=+0111=7,求X+Y。
  将X和Y转换为补码形式可得:[X]=0.1011,[Y]=0.0111

  因为[X+Y]=1.0010,所以X+Y=-1110=-14。
  两正数相加结果为负,显然是错误的,出现这种情况的原因是数值部分的和已经超出了机器所能表示的最大整数,即18>16。所有发生了上溢出情况。同理,如果两个负数相加得到的结果为正,肯定也发生了溢出,不过这样的溢出我们称之为下溢。
  为了判断运算是否发生了溢出,可以采用两种方法进行检测。第一种方法是采用双符号位法,这种方法也称为变形补码或模4补码法;第二种方法是单符号位法。
  (1)双符号位法。一个符号位只能表示正、负两种情况,当产生溢出时,符号位的含义就会发生混乱。如果将符号位扩充为两位(S1和S2),其所能表示的信息量将随之扩大,既能检测出是否溢出,又能指出结果的符号。在双符号位的情况下,把左边的符号位叫做真符,因为它代表了该数真正的符号,而右边的符号位常用于判断是否发生溢出,因为一旦发生溢出,右边的符号位就会发生变化,而变得与左边的符号位不一致。如果两符号位一致表明没有溢出发生。
双符号位的含义如下:
  S1S2=00,表示结果为正数,无溢出。
  S1S2=01,表示结果上溢。
  S1S2=10,表示结果下溢。
  S1S2=11,表示结果为负数,无溢出。
  如果前面的例子采用双符号位,则有:
  将X和Y转换为补码形式可得:[X]=00.1011,[Y]=00.0111

  因为[X+Y]=01.0010,表示计算的结果发生了上溢。
  为了尽可能减少代价,在采用双符号位方案时,操作数和结果在寄存器和主存中仍保持单符号位,仅在运算时再扩充为双符号位。
  (2)单符号位法。两个相同符号数相加,其运算结果符号应与被加数相同,否则产生溢出;相异符号数相加,相同符号数相减不会产生溢出。两个相异符号数相减,其运算结果符号应与被减数相同,否则产生溢出。由于减法运算在机器中是用加法器实现的,因此有如下结论:无论是加法还是减法,只要实际参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,结果与原操作数的符号不同,即为溢出。
  “两个相同符号数相加,其运算结果符号应与被加数相同,否则产生溢出”这种判断方法不容易由硬件来实现。通常用符号位产生的进位和最高有效位向符号位产生的进位进行异或操作后,按其结果进行判断。若异或结果为1,则溢出;若异或结果为0,则没有溢出。
  5.定点数的乘法运算
  在计算机中,乘法运算由累加和右移操作实现,根据机器数的不同,主要分为原码乘法和补码乘法。
  (1)原码乘法。原码一位乘法的运算规则是:乘积的符号通过两数符号的逻辑异或求得,乘积的数值部分由两数绝对值相乘。硬件配置如图2-5所示。

  原码一位乘法的控制流程如图2-6所示。

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭