定点数的运算

定点数的运算

一、加法
1.原码:
如果两个数符号位相同,取绝对值相加,符号位不变。
如果两个数符号位不同,取绝对值相减,结果的符号与绝对值大的保持一致。

2.补码:
两个数相加时符号位也参与运算。两个数和的补码等于两个补码的和。

二、减法
1.原码:
可按照原码的加法运算来。
2.补码:
x-y的补码等于x加上负y的补码,根据补码的加法原则可以得到x-y的补码等于x的补码加上负y的补码。

三、乘法
1.原码一位乘:
在这里插入图片描述
这是我们手算的时候(二进制),如果当乘数的某位上为1,则被乘数就加上本身,否则加上0。
如果想让计算机也模拟这种乘法:
1.n位数相乘需要2n+1位长的寄存器
2.被乘数要右移n次,且有n位数相加,而常规的计算机内都是两个数相加。
所以用手算的方法会导致空间时间的浪费。

1.对于2n+1位寄存器可以选择三个寄存器,一个存相加后的最高位(a寄存器),一个存最低位(b寄存器),还有一个存储被乘数。
2.让相加后的结果左移,而移掉的最低位可以作为b寄存器的最高位。
3.为了更加的精简,可以让则开始还没有存最低位的b寄存器存储除数,根据末位为1还是0确定要加的是补乘数还是0。之后末位的1没用可以右移去掉,而空出来的最高位用来存储结果右移的最低位。
这里还是以0.1101x0.1011为例
首先:符号位用一个电路异或(0)。然后将两个数的绝对值相乘。
在这里插入图片描述
最后结果为:0.1000 1111
右边寄存器最末位决定乘0还是被乘数,灰色代表移位后寄存器的内容。
注:这里有4位,但是用5位是为了防止溢出。

原码二位乘

最高位用2位表示(但是只有最高位为符号位),00表示没有相加,01表示加1倍的被乘数x,10表示加2x(将x左移1位得到),11表示加3x,可以先减去x(为了记住这个操作,计算机用一个触发器置为1来表示-x),再将x左移2位。即3x = -x+4x。

四、除法:
1.原码:符号位单独异或。两个数的绝对值相除。
1).恢复余数法:因为首先相除的时候要比较除数与被除数的大小,除数大则上商0,反之1。所以首先将两个数相减,如果小于1,则上商0,然后把减去的数补回来,即恢复余数。
例:x = -0.10110,y = 0.11111, 因为减y时可以写成加-y的补码,所以-y的补码为11.00001
在这里插入图片描述
最后商为-0.10110,因为左移5次,余数为00.10110x2-5 = 0.0000 0101 110

2.不恢复余数法:
由于每次-y后发现不够,所以以把y加回去,然后上商0之后将之前的结果左移1位再+y,这样太麻烦,可以直接写成2(x+y)-y = 2x+y(结果为负),反之2x-y。

如果发生溢出,则需要发出错误信息,进行中断处理。

发布了17 篇原创文章 · 获赞 0 · 访问量 123

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/104717621