加减运算&溢出判断(计算机组成原理16)
加减运算&溢出判断
视频链接地址:
https://www.bilibili.com/video/BV1BE411D7ii?from=search&seid=6420326887479343502
前言
在本篇中,你将掌握
- 原码、补码的加减法运算
- 加法运算的三种溢出判断
- 符号扩展的实现
1 原码的加减运算
注意看上图,14+(-14)的原码加法是错误的
原码的加法运算:
正+正 = 绝对值做加法,结果为正
负+负 = 绝对值做加法,结果为负
正+负 = 绝对值大的减绝对值小的,符号位同绝对值大的数
原码的减法运算,“减数”符号取反,转变为加法
可以看出,原码的加法逻辑太难了,所以计算机中通常用补码来实现加减运算
2 补码的加减运算
2.1 补码加减
[
A
−
B
]
补
=
[
A
]
补
+
[
−
B
]
补
[A-B]_{补} = [A]_{补} + [-B]_{补}
[A−B]补=[A]补+[−B]补
对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算。
且对于8位机器字长的补码运算会出现溢出,(-128至127)
2.2 溢出判断
在补码加法运算中,会出现溢出这种问题,可以将溢出理解为“循环补码”
比如三位机器数的加法,3+3 = 011 + 011 = 110 = -2
因此,我们可以得到这样的规律:
只有“正数+正数”才会上溢——正+正=负
只有“负数+负数”才会下溢——负+负=正
在此,计算机判断溢出的方式有三种:
-
方法一:采用一位符号位,离散数学方式进行逻辑表达式计算,而在硬件实现上也只需与门、或门、非门就可以实现逻辑表达式的计算
-
方法二:采用一位符号位,根据数据位进位情况判断溢出
-
方法三:采用双符号位,正数的符号位为00,负数的符号位为11
在相加得到结果后,如符号位变成01则表示正确的符号位为0,实际的符号位为1,发生了上溢
注意:实际存储时只存储1个符号位,运算时会复制一个符号位
双符号位补码又称:模4补码
单符号位补码又称:模2补码
2.3 符号扩展
避免溢出可以使用符号扩展的方法:将短数据扩展为长数据
3 小结
本篇重点:
(1)原码、补码的加减法运算
(2)溢出判断的三种方法,其中第三种:双符号位方法中注意理解模4补码、模2补码的概念
(3)符号扩展的实现,注意负整数反码、补码的补位添1,负小数补码添0、反码添1
上一篇: 笔记--Java的for循环中i++和++i的区别
下一篇: 返回页面顶部,顶端