|
|
|
0+0=01+0=10+1=11+1=0(有进位)
|
|
|
|
0-0=01-0=11-1=00-1=1(有借位)
|
|
|
|
|
|
在计算机中,可以只设置加法器,而将减法运算转换为加法运算来实现。
|
|
|
(1)补码加法的运算法则是:和的补码等于补码求和,即[X+Y]补=[X]补+[Y]补。
|
|
|
(2)补码减法的方法是:差的补码等于被减数的补码加上减数取负后的补码。因此,在补码表示中,可将减法运算转换为加法运算,即[X-Y]补=[X]补+[-Y]补。
|
|
|
(3)由[X]补求[-X]补的方法是:[X]补的各位取反(包括符号位),末尾加1。
|
|
|
|
在确定了运算的字长和数据的表示方法后,数据的范围也就确定了。一旦运算结果超出所能表示的数据范围,就会发生溢出。发生溢出时,运算结果肯定是错误的。
|
|
|
只有当两个同符号的数相加(或者是相异符号数相减)时,运算结果才有可能溢出。
|
|
|
|
|
(1)纯软件方案,在只有加法器的低档计算机中,没有乘、除法指令,乘除运算是用程序来完成的。这种方案的硬件结构简单,但进行乘除运算时速度很慢。
|
|
|
(2)在现有的能够完成加减运算的算术逻辑单元ALU的基础上,通过增加少量的实现左、右移位的逻辑电路,来实现乘除运算。与纯软件方案相比,这种方案增加硬件不多,而乘除运算的速度有了较大提高。
|
|
|
(3)设置专用的硬件阵列乘法器(或除法器),完成乘(除)法运算。该方案需付出较高的硬件代价,可获得最快的执行速度。
|
|
|
|
|
设有浮点数X=M×2i,Y=N×2j,求X±Y的运算过程如下。
|
|
|
(1)对阶。使两个数的阶码相同。令K=|i-j|,把阶码小的数的尾数右移K位,使其阶码加上K。
|
|
|
|
(3)结果规格化并判溢出。若运算结果所得的尾数不是规格化的数,则需要进行规格化处理。当尾数溢出时,需要调整阶码。
|
|
|
(4)舍入。在对结果进行右移时,尾数的最低位将因移出而丢掉。另外,在对阶过程中也会将尾数右移使最低位丢掉。这就需要进行舍入处理,以求得最小的运算误差。舍入处理的方法如下。
|
|
|
①截断法。将要保留的数据末位右边的数据全都截去,不管数据是0还是1。
|
|
|
②末位恒1法。将要保留的末位数据恒置1,不管右移丢掉的数据是0还是1。
|
|
|
③0舍1入法。舍去的数据为0时,保持末位原始状态。若舍去的数据为1,则将末位加1。这类似于十进制中的四舍五入。但当数据为0.1111…1,即在尾数全为1的特殊情况下,这种舍入会再次产生溢出。遇到这种情况可用硬件判断,并在舍去1时末位不再加1。
|
|
|
(5)溢出判别。以阶码为准。若阶码溢出(超过最大值),则运算结果溢出;若阶码下溢(小于最小值),则结果为0,否则结果正确无溢出。
|
|
|
|
浮点数相乘,其积的阶码等于两乘数的阶码相加,积的尾数等于两乘数的尾数相乘。浮点数相除,其商的阶码等于被除数的阶码减去除数的阶码,商的尾数等于被除数的尾数除以除数的尾数。乘除运算的结果都需要进行规格化处理并判断阶码是否溢出。
|
|
|