运算方法和运算器

目录

定点加减运算

补码加法运算

补码减法运算

溢出概念及检测方法

溢出的检测方法及解决办法

(1)采用双进位的进位判别

(2)采用双符号为的方法

解决方法:

定点乘法运算

移位与舍入操作

原码一位乘法 

补码一位乘法

浮点运算

浮点加减运算


定点加减运算

在计算机中进行加减运算,便于运算,都采用补码的形式,在运算的过程中不需要比较两数的大小和正负。

补码加法运算

            [x+y]补=[x]补+[y]补,在计算机中进行加法运算。

需要进行的过程为:

真值数---->原码----->补码----->补码相加结果----->原码------->真值数

注意:

1、符号位与数值位便于区分加逗号,且符号位参与运算中。

x= -1101,y=+0110, 利用加法运算求 x + y

                                      

补码减法运算

计算机中便于进行减法运算,将减法运算转换为加法运算,也就是将减数进行变号处理。

         x - y = [x]补 + [ -y ]补码= [x]补 + [ [y]补 ]变补,([ [y]补 ]变补 = [-y]补)。

变补是在补码的基础上,不论正负,包括符号位按位取反,然后加一。

补码减法运算进行的过程为:

真值数----->原码------>补码------->减数进行变补------>补码与补码的变补相加------>原码----->真值数

x= -1001,y=+0101, 利用减法运算求 x - y

                                      

溢出概念及检测方法

溢出运算的过程中,如果超出机器字长所能表示的数据范围称为溢出。

如果超出机器所能表示的最大正数,称为正溢出,反之负溢出。

溢出的检测方法及解决办法

(1)采用双进位的进位判别

一句话概括:如果在运算的过程中,数值位的最高位的进位与符号位的进位相同,则没有溢出,否则溢出。

此方法仅仅方便判断运算是否溢出,并无解决方法

(2)采用双符号为的方法

采用将补码的符号位扩充为两位,并且参与运算。双符号位的补码也称为变形补码。  

1、如果双符号位相同:

双符号位为00,结果为正数;双符号位为11,结果为负数。

2、如果双符号位相异则溢出:

双符号位为10,结果为负溢出;双符号位为01,结果正溢出。

解决方法:

运算结束后,根据双符号位判断是否溢出。溢出的,双符号位的低位作为数值位的最高位,(换言之,整体右移,区别符号位和数值位的逗号左移一位)。

定点乘法运算

移位与舍入操作

在进行乘法运算前,需要了解移位的操作。二进制自身可以进行乘除运算,二进制左移相当于乘以2,右移相当于除以2。


对于左移右移,原有的二进制数移位后如何进行补位操作,需要分情况:

无论正负数,在移位的操作过程中,符号位都保持不变。

1、原码的移位:无论正负数,符号位不变,移位后空出的位补0。

2、补码的移位:对于正数,符号位不变,无论左移还是右移,空出的位补0;

                           对于负数,符号位不变,左移时,低位补0;右移时,高位补1;


移位操作可能出现的误差问题:

如果右移前,低位为1,右移后会出现误差;左移后,如果超出机器字长表示的范围,会溢出,出现误差。

舍入操作

移位后,如果超出机器字长的位数,需要进行舍入操作。

原码一位乘法 

  二进制的乘法操作与十进制的类似,乘数从低位依次开始与被乘数相乘,每次结果相乘后错位,最后将结果相加。但在计算机中,并不是最后把每次相乘的结果相加。


原码一位乘法,对于n位数相乘,需进行 n 次加法和 n 次移位。


对于原码,符号位不进行运算,两乘数的符号位采用逻辑的操作判断正负,只对数值位进行乘法运算。

  在乘法过程中需要了解的名词,乘数的每一位与被乘数相乘的称为“位积”,每一次位积的累加结果称为“部分积”

其中在每一次的加法运算中,存放位积的寄存器和被乘数的寄存器中的内容作为一个整体右移,被乘数的低位舍去,次低位移到低位参与下一次的乘法运算,而被乘数的最高位由位积的低位补上,位积的最高位补0。

只要被乘数的低位为1,位积需要加上被乘数,低位为0,位积加上0,不变。

补码一位乘法

采用直接补码乘法(Booth算法)

补码的符号位参与运算。采用变形补码的方式进行操作。补码与原码不同的时,在操作的过程中会出现加减操作。位积和被乘数采用双符号位补码的形式,乘数采用单符号位补码的形式。


补码的一位乘法需要进行 n 次累加,n - 1次移位,最后一次不用移位。


乘法的过程与原码类似,进行移位和累加操作。不同的是,每一次部分积和位积需要判断进行加减法操作。根据被乘数的最后两位数进行判断,如果为01,部分积加上位积;10,部分积减去位积;如果两数相同,部分积加0,不变。注意:补码的移位操作,补码的部分积累加或累加进行移位操作时,双符号位不变,移位后空出的高位补与符号位相同的数。

浮点运算

浮点加减运算

浮点数的格式包括阶码和尾数两部分。

浮点加减运算的步骤为:对阶、尾数加减运算、规格化处理、舍入操作、溢出判断。


步骤一:对阶

对阶的作用,在计算机中,两浮点数阶码相同,尾数加减运算时更方便。

两浮点数的阶差判断,△E=Ex-Ey

阶码判断时都采用变形补码的形式,若△E=0,阶码相同,进行下一步骤;若△E > 0,后者的阶码小,(需要对阶处理,为减小对阶过程中的误差,采用小阶码向大阶码对齐),尾数每右移一位,阶码加1,直到阶码相等为止; 若△E < 0,前者同样采取对阶处理。

步骤二:尾数加减运算

对阶完成后,尾数采用变形补码的形式进行同定点的加减运算。

步骤三:规格化处理

尾数加减后的结果进行规格化处理。若结果为非规格化,根据结果情况左移右移至规格化,每一次移位阶码也进行加减。

步骤四:舍入操作

因位数有限,尾数移位后造成的问题。常采用舍0入1(类似四舍五入,超出的位若为1,入1也就是尾数低位加1,可能会造成溢出的问题需要再次右规再次同样的操作,超出位为0,舍去)、直接置1的方法。

步骤五:溢出判断

溢出判断是根据阶码的变形补码的形式的双符号位进行判断,(浮点数的阶码决定范围,尾数的位数决定精度)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值