统计正数和负数的个数然后计算这些数的平均值_计算机组成原理 定点运算-移位、加、减、乘、除(详细解析-看完就会)...

976bff72e69d8d5319514729b0217a92.png
计算机组成原理 定点运算-移位、加、减、乘、除(详细解析-看完就会)​blog.csdn.net
9c043d6638afbb3aefbe503d36986b8f.png

定点运算

一、移位运算

  • 1.移位运算的意义:

计算机中的移位是数据相对于小数点移位(左移或右移),数据移动,小数点位置不发生变化

  • 2.在平常,数值移位

左移:绝对值扩大

右移:绝对值缩小

  • 3.在计算机中二进制移位

左移:数值绝对值变为原来2倍

右移:数值绝对值变为原来1/2倍

  • 4.算术移位规则

有符号位的移位

左移1位:机器数对应真值的绝对值变为原来2倍

右移1位:机器数对应真值的绝对值变为原来1/2倍

  • 5.移位过程中,如何填补空位

负数:数值部分和真值相同

69f7c9e2b800a0b037e827f74058a5f3.png
  • 6.逻辑移位与算术移位

无符号数的移位

逻辑左移 低位添0,高位移丢

逻辑右移 高位添0,低位移丢

例如:

01010011

逻辑左移 所有位都参加移位操作 高位0移丢,最低位添0 :10100110

算术左移 第一个0表示符号位,这个数为正数,符号位不参与移位,移位的是后面的数据00100110

例如:

10110010

逻辑右移 所有位都参加移位操作 空出的最高位补0,最低位丢弃01011001

算术右移 最高位不参与移位,符号位,表示负数,右移左侧空出最高位添1,右侧0丢弃11011001


二、加法和减法运算

  • 1.补码加减法运算公式

在计算机中

(1)加法

A+B整数:【A】补+【B】补=【A+B】补(mod 2^(n+1))

A+B小数:【A】补+【B】补=【A+B】补(mod 2)

(2)减法: A-B=A+(-B)

A-B整数:【A-B】补=【A+(-B)】补(mod 2^(n+1))

A-B小数:【A-B】补=【A+(-B)】补(mod 2)

补码运算:连同符号位一起相加,符号位产生的进位自然丢掉

加法例题:

2c330374cc07e7e361d063ac3b287ea1.png

ba52b4160341cdb0ed9708f12c41cf19.png

减法例题

1.设机器数字长为8位,(含1位符号位),A=15,B=24,用补码求A-B

af32740fb29a6f7ca7b6c7758c8b6dd7.png
  • 3.溢出判断

(1)一位符号位判溢出

参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出。

两个正数相加,如果补码最后得到的结果为负数,那就说明发生了溢出错误,但是如果有效位有进位的话,会进到数值位去,使得相加后的符号位变为1,这样两个正数相加就变成了负数,显然是错误的,发生率溢出。

两个负数相加,本身补码的符号位都为1,符号位肯定会发生进位,并且最高位丢弃,如果此时负数的有效位部分没有进位,那么两个负数相加后的符号位就变成了0,显然发生了溢出。

异或运算:

最高有效位进位:数值的最高位在运算时产生的进位

符号位产生的进位进行异或运算

若得到得结果为1,两个进位不相同,可判断出发生溢出

accae3aa3cae049f3ba8d9e24e31d25d.png

例如:

43d01d3ef12d257c1883dcd579bc23c7.png

举例:
A=-9 对应的二进制1,0111
B=-5 对应的二进制1,1011
A+B=11,0010
逗号后面进了1,为最高有效位的进位,它与数值为的最高位1异或得结果为0,表示没有发生溢出

(2)两位符号位判断溢出

假设做存小数定点机中的加法运算,将补码的mod由2改为4

83a38ca75b6c104f8ae41d9e6fc55ec9.png

这种形式的补码,即使X>0,也要在小数点前面加2位,小数点数值部分设置两位符号位,小数点数值部分和X相同,(并不是说补码和在纸上写的真值的形式完全相同)

同样如果是负数,采用4位mod,经过这种变换,数值的数字的符号位,就变为2个1,然后是小数点,后面是每位取反,末尾加1

若为整数,原来用2^(n+1)作为整数的mod

若采用双符号位,mod要变为2^(n+2)

若为整数形式,求补码mod,符号位是m位;

若为正数m个0,后面是数值部分

若为负数m个1,后面的数值部分要每位取反末尾加1

所以可以推广为以4为mod,以8为mod

38013374fb7788e401dece757b7330d8.png

判断最高有效位与符号位是否相等来判断是否溢出

  • 若结果的双符号位相同,未溢出
  • 若结果的双符号位不同,溢出(符号位为10或者01 则发生了溢出)

10,xxxxxxx

01,xxxxxxxx

前面的符号位的第一个符号位,是真正的符号位,第二个符号位,是运算时数值发生溢出产生的符号位

所以最高符号位代表真正的符号位


三、乘法运算

  • 1.分析笔算乘法

A=-0.1101 B=0.1011

9945f1fb751404f96fafd227b1a10b20.png

符号位单独处理;

被乘数逐步左移,其数值是本身还是0由乘数的某一位决定的;

四个部分积分别相加;

乘积位数扩大一倍

  • 2.笔算乘法改进

A·B=A·0.1011

=0.1A+0.00A+0.001A+0.0001A

=0.1A+0.00A+0.001(A+0.1A)

=0.1A+0.01[0·A+0.1(A+0.1A)]

=0.1{A+0.01[0·A+0.1(A+0.1A)]}

=2^(-1) {1·A+ 2^(-1) [0·A+2^(-1) (1·A+2^(-1)(1·A+0))]}(在二进制中2^(-1)=0.1)

a0712c3a7d58a00167aa5765f62c2425.png
  • 3.改进后的笔算乘法过程

乘法运算可用加和移位实现
n=4,加4次,移4次
由乘数的末尾决定被乘数是否与原部分积相加,然后->1位形成新的部分积1,同时乘数->1位(末尾丢掉),空出高位存放部分积的低位。
被乘数只与部分积的高位相加

(1)原码1位乘运算规则
以小数为例

bad59815cd85d2a79d9a98d426a611ba.png

2)例题:

已知x=-0.1110 y=0.1101 求[x·y]原

c7518306403cf49041b87884ba0fa731.png

e08f4c128ba0c6cae1522d197b06f72a.png

则[x·y]原=1.10110110

特点:
绝对值运算
用移位的次数判断乘法是否结束


四、除法运算

  • 1.分析笔算除法
    X=-0.1011 y=0.1101 求x/y

582047666f93b89af49354af9104c1af.png

x/y=-0.1101

余数 0.00000111

1.上商后补0,和右移1位的除数0.01101做比较,比现在加0后的被除数小,上1,减掉右移1位的除数;

2.添0,和右移2位的除数做比较,小数后有2个0,显然比现在的余数小,上商1,减掉右移2位的除数,得到新余数;

3.添0,把新余数和右移3位的除数0.0001101做比较,比现在的余数大,上商0,继续给新的余数添0,和右移4位的除数0.00001101做比较,比新余数小,上商1,减法得到余数

当商的位数和除数的位数一样时停止

  • 2.笔算除法和机器除法比较

0717b13f28bf622ab772ffd9c13bde07.png
  • 3.原码除法

以小数为例

0506fb8f328d608299a75bd31db73460.png

特点

商的符号位单独处理x与y异或运算

数值部分为绝对值相除x^* / y^*

小数定点除法x^* < y^* 整数定点除法x^* > y^*

被除数不等于0,除数不能为0

(1)恢复余数法

例题:

x=-0.1011 y=-0.1101 求[x/y]原

解:[x]原=1.1011 [y]原=1.1101 [y^* ] 补=0.1101 [-y ^* ]补=1.0011

做减法目的:试探上商为1还是0

c8062a6981c1331b7473401bc23d1b13.png

所有x^* / y^*=0.1101

[x/ y]原=0.1101

一共进行了5次上商,4次移位,第一次上商判断是否发生溢出:

若在小数定点机中,第一次上商上1,说明发生溢出,商的值大于1,所有只能表示绝对值小于1的数

特点:

余数为正:上商1

余数为负,上商0,恢复余数

和传统除法的区别:余数左移而不是原来的除数右移;由于先做的是减法操作,上商0的时候,不应该做减法,所以要恢复余数,恢复余数之后,再把余数左移1位,它的值扩大2倍;和除数再进行比较,以决定下一个上商为0或1,循环

(2)不恢复余数法(加减交替法)

恢复余数法运算规则

68b712bcdf20d32948b733d2a17fbca9.png
  • 不恢复余数法运算规则(加减交替

dba58bbed65f521e5f3d58506ff08c17.png
  • 例题:
    x=-0.1011 y=-0.1101 ,求[x/y]原

解:[x]原=1.1011 [y]原=1.1101 [y*]补=0.1101 [-y*]补=1.0011

c308b092687f4839963a421dafb7b891.png

符号位x=1与y=1异或得到为0

x^* / y^*=0.1101

[x/y]原=0.1101

特点:

  • 上商n+1次
  • 第一次上商判断是否溢出(判断被除数和除数直接的大小关系)
  • 在小数定点机中,被除数的绝对值大于除数的绝对值,第一次上商为1就发生了溢出,移位n次,直到第一次上商处于最后一位的商的值移到符号位的位置;做了n+1次加法
  • 用移位的次数判断除法是否结束

PS:csdn博客有彩色重点标记,看起来更加清晰明白(可点击最开始卡片链接)

非作者允许情况下,禁止转载或抄袭。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值