其他分享
首页 > 其他分享> > 一篇文章学会定点数的运算(计算机组成原理知识点总结)

一篇文章学会定点数的运算(计算机组成原理知识点总结)

作者:互联网

一些需要知道的事情

1.符号扩展
在运算时我们发现题目基本会给机器字长8位这么一句话,但是打个比方3换为二进制是11只有两位,但是当它和6相加时就会出现问题,因为6是110,这个时候符号扩展就很有用了。
对于正数来说符号扩展很简单,附加位直接写0就可以。
对于负数来说:原码与正数无区别,反码则要全部补1,补码则是整数补1,小数补0
2.溢出判断
溢出分为两种,上溢(数太大)和下溢(数太小)。我们也可以推断出只有两个数相加才会发生上溢出,两个数相减才会发生下溢出。加减法出现溢出表示结果错误
溢出的判断发法(其实一看应该就能看出来,这里主要是按照机器的思维走的。)
1)一位符号位:相加或相减的两个数符号位一致,在参与运算后,符号位发生了变化,则结果溢出。
2)通过进位判断:符号位的进位与操作数最高位的进位相同无溢出,否则溢出了。举个例子,比如加法运算符号位应该是0,最高位如果出现1+1的情况就要进位,进位为1,但是符号位为0,0+1不用进位,所以进位为0,0和1不相同就为溢出。
3)两位符号位:这个可能会更安全可靠一些,两个符号位如果相同则未溢出,不同则溢出了。

移位运算

逻辑移位(视为无符号数)

逻辑左移:高位丢去,低位补0;
逻辑右移:低位丢去,高位补0.

算数移位(视为有符号数):

在此过程中符号位不变
正数:由于原码等于反码等于补码等于真值,因此移位后出现的空位补0就可以。
负数:对于负数,则要根据情况:

类型移动数值
原码左右均补0
反码左右均补1
补码左0右1
循环移位

循环移位又要细分:带标志位CF的大循环和不带CF的小循环。
循环移位顾名思义:移出的数据又会被移进来。

大循环和小循环的区别也很简单:
相当于多了一个CF位来加入循环。
看下图:在这里插入图片描述
画得不好,但是很明显我们可以看出,带标志位的会加入循环移位的过程。它的作用在我看来就是将数据的高字节与低字节互换。

原码定点加减法运算

我们就按正常逻辑走:
1.判断符号位(全正则正全负则负)
2.符号位一样绝对值相加,再加上符号位就OK了。若是符号位不一样就做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同。
如果出现溢出现象,将溢出位丢掉。
例子:
在这里插入图片描述
在这里插入图片描述

补码定点加减法运算

补码运算必须要注意:
参与运算的两个数必须都是补码形式(博主曾经吃过亏…)
在计算的时候如果算出来结果溢出,需要进行模运算来丢掉溢出数据。
模运算的M是当定点整数:2的(n+1)次方,当定点小数:2

加法就直接相加,减法的话减数负数与被减数相加。
补码运算结果肯定也是补码。
例子:
在这里插入图片描述

原码一位乘法运算

和正常思维一样:符号位进行异或运算。数值位的绝对值相乘。余下和乘法一样,但是要注意每一次乘完,记得右移。
例子:
在这里插入图片描述

被乘数和部分积在考虑到绝对值出现大于1的情况往往采用双符号位。

补码一位乘法运算

补码一位乘法中符号位参与运算。
要注意在乘数的最后加一位初始值为0,通过判断最后一位和倒数第二位的值,若最后一位大则加被乘数的补码,移位时前边补0;若最后一位小则加被乘数的负数的补码,移位时前边补1;若最后一位和倒数第二位一样大加0,移位时前边补1;
在这里插入图片描述

原码除法运算

符号位另算,不恢复余数的原则下:
用被除数减去除数,余数为正数则商加一,余数和商左移一位,再减去除数;余数为负数则商上0,余数和商左移一位,再加上除数。
例子:在这里插入图片描述
最后一点为×2的-4次方…

补码除法运算

方法中心想法是补码加减交替法。
举例:在这里插入图片描述

标签:知识点,运算,符号,补码,原码,移位,定点数,溢出
来源: https://blog.csdn.net/m0_50210478/article/details/110264682