一、原码的加减运算
如果直接根据原码运算,那运算强度会高,如下图所示
因此采用原码的补码进行原码的加减运算
- 1、补码加减运算的基本公式
加法:
[A]补 + [B]补 = [A+B]补
减法:
[A-B]补 = [A] - [-B]补
- 2、由[B]补求[-B]补:
连同符号位在内,全部取反后+1
- 3、将补码换为原码方法
1.正数补:正数的补码即为原码
2.负数补:
a.数值位取反末尾+1 (注意符号位不要取反!!!)
b.在数值位中最右边的1不变,以这个1为分界线,它的左边全部取反
二、溢出的判断
1、什么是溢出
由上图可知 A+C应该等于139;B-C应该等于-148
但是由于8位只能表示 +128 ~ -127
只有“正数+正数”才会上溢——正+正=负
只有“负数+负数”才会下溢——负+负=正
2、溢出的判断
三、原码乘法
计算步骤:
1.原码符号位进行异或运算,最后再加入
2.原码数值位进行一位乘法运算
步骤:
a.若乘数(低位部分积)最低位是1,则给被乘数(高位部分积)加上乘数原码;若乘数最低为是0,则给被乘数加上0.
b.每进行一轮加法后,乘数和被乘数整体逻辑右移,乘数最低位被舍弃,被乘数的最低位变成乘数的最高位,一共进行n轮加法,n为被乘数数值位数.
拓展:运算器的运算原理
四、补码乘法运算
五、原码除法
1.恢复余数法
缺点:每当余数为负,都需要恢复余数,延长了机器的除法时间,操作也很不规则,对线路结构不利
步骤:
1.将x,y的绝对值算出;再取得 [|y|]补 与 [|-y|]补
2. x+[|-y|]补 得出下一步,若其符号位是1,即余数为负,则商0,恢复余数,然后逻辑左移加上 [|y|]补 ;若其符号位是0,即余数为正,则商1,直接逻辑左移再次进行步骤2
3.左移N次,上商N+1次,最后一次上商,但不用逻辑左移
4.商的符号位X的符号位与Y的符号位异或所得A
5.[X/Y]原=A.取商的后N位
2.加减交替法(不恢复余数法)
六、补码除法
因此[X/Y]=1.0101