|
|
虽然原码与人的思维方式一致,但是运算时要单独处理符号位,而且0的表示不唯一,反码也存在同样的问题。所以计算机中定点数的加减运算用补码,符号位可一起处理。
|
|
|
补码加法运算规则:和的补码等于补码的和,即[X+Y]补=[X]补+[Y]补。
|
|
|
补码减法运算规则:差的补码等于被减数的补码加上减数取负后的补码。由[Y]补求[-Y]补的方法是[Y]补各位取反然后末位加1,即[X-Y]补=[X]补+[-Y]补。
|
|
|
字长为n的计算机整数的表示范围为-2n-1~2n-1-1,所以进行加减运算时要判断是否溢出。判断溢出方法除了能根据两数符号及运算结果符号判断外,还可以利用双进位位状态判断和利用变形码判断。
|
|
|
双进位位状态判断规则是:两个补码数实现加减运算时,若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出,可表示为
|
|
|
OVR=Cn-1⊕Cn(Cn-1是最高数值位的进位值,Cn是符号位的进位值)
|
|
|
在右边的例子中,Cn-1=1,Cn=0,则OVR=1,有溢出。
|
|
|
变形码判断规则是:用两位二进制数表示符号位,用00表示正数,用11表示负数,当两位符号位不同时,即结果为01表明两个正数相加结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加小于计算机所能表示的最小负数,称为"下溢"。
|
|
|
|
|
|
原码乘(除)法:乘积的符号位由被乘(除)数和乘(除)数的符号位异或得到;数值部分由被乘(除)数和乘(除)数数值部分相乘(除)得到,方法与十进制乘法类似。
|
|
|
补码乘法:当两个乘数为正数时,[X×Y]补=[X]补×[Y]补,当Y为负数时,是用[X]补乘以[Y]补的数值位,然后再加上[-X]补。另外,还有用逻辑电路实现的由Booth夫妇提出来的比较法,可避免区分乘数的符号。
|
|
|
|
|
|
式中,S为数N的尾数,为规格化的二进制小数,机器中多用原码或补码表示;J为数N的阶码,为二进制整数,机器中多用移码或补码表示。
|
|
|
|
|
|
(1)对阶操作。比较两个浮点数的阶码值的大小,求△J=J1-J2。当其不等于0时,将原来阶码小的数的尾数右移|△J|位,其阶码加上|△J|。尾数右移时,对原码表示的尾数,符号位不参加移位,尾数高位补0;对补码表示的尾数,符号位要参加右移并保持不变。
|
|
|
(2)尾数运算。实现尾数加减运算,若得到的结果不满足规格化规则,就进行规格化处理。
|
|
|
当结果尾数的两个符号位不同时尾数运算溢出,此时应使尾数右移一位,阶码加1,称之为右规;当结果尾数不溢出时,但最高数值位与符号位相同时,应重复地使尾数左移,阶码减1,直到出现最高数值位与符号位不同时为止,称之为左规。
|
|
|
(3)舍入操作。在对阶和右规操作时,尾数低位上的若干位数值被移掉,会产生误差。可进行截断处理,无条件丢弃这些值;也可把这些值保存起来,最后采用0舍1入的方法处理,这样做很可能使尾数溢出,此时再做右规处理;或者若有被丢掉的值,则将末位恒置为1。
|
|
|
|
|
两个浮点数相乘,其乘积的阶码应为相乘两个数的阶码之和,其尾数应为相乘两数尾数之积。两个浮点数相除,商的阶码应为被除数阶码减去除数阶码的差,尾数应为被除数尾数除以除数尾数的商。乘除运算都可能出现结果溢出,或者不满足规格化要求,也必须进行检查和处理。
|
|
|