定点数的加减运算(重点)

一、前言

定点的加减运算是重点,也是难点。其中,由于计算机中不会用“反码”进行加减运算,因此我们不讨论反码。而原码的加减运算在考试中不做要求,我们只需稍加了解即可。

我们会重点总结补码的加减运算,及其溢出判断,梳理清楚,并且完全掌握。

要讲加减运算的时候,我们应从三个方面去看:(1)符号位如何判断? (2)数值位如何计算? (3)溢出情况的判断

二、原码的加减运算(了解)

原码的加减运算是需要单独考虑符号位的。

1. 原码的加法运算

如表所示(数值位都是对操作数的绝对值操作得来)

符号位数值位溢出情况
正 + 正正(0)绝对值相加可能溢出
负 + 负负(1)绝对值相加
正 + 负同 绝对值大 的数大 - 小

2. 原码的减法运算

原码的减法运算思想:将其转变为等价的加法运算。即 将“减数”符号取反,转变为加法。

如,正 - 负 --》正 + 正。

为了便于理解,我们不妨假设x 为正数,-y 为负数。x - (-y) = x + y 

而在计算机中我们要 -y 从变为 y 的方法是,将符号位取反。

三、补码的加减运算(重点!)

补码的加减运算不需要单独考虑符号位,直接带符号位计算,结果的符号位直接在运算中得出。

1. 补码加减运算规则

[A + B]补 = [A]补 + [B]补 [mod 2^(n+1) ]

[A  - B]补 = [A]补 + [-B]补  [mod 2^(n+1) ]          (设机器字长位 n + 1 )

注意:(1)符号位 与 数值位 一起参与运算,运算结果的符号位也在运算中直接得出。

(2)最终运算结果超出 n + 1 位的高位(溢出部分)直接丢弃。

(3)运算结果也是补码。注意有的题目要求真值的时候,需要先把运算结果转化为原码再来求。

(4)一些常用便捷转化方法:

负数原码<-->负数补码 转换便捷方法:找到最右边的1,其左边全部取反(除符号位外)。

(注意!正数的补码 = 正数的原码,千万不要把正数的补码也当成负数求了!)

[B]补 <--> [-B]补 转换便捷方法:找到最右边的1,其左边全部取反(包括符号位)。 

(无论B是正数还是负数都可以这么转换,读者可以去自行验证一下)

2. 溢出判断

(1)溢出情况:同加异减(同号相加 或 异号相减)

  • 正 + 正 才会 上溢:正 + 正 = 负
  • 负 + 负 才会 下溢:负 + 负 = 正

(由于减法都可以转变为加法,所以最终可以总结为这两种溢出情况)

(2)溢出判断方法:三种方法

  • a.采用一位符号位,根据(1)中 “正 + 正 = 负” 和“负 + 负 = 正”两种溢出情况判断。        
  • b.采用双符号位
    • 无溢出:00(结果为正),11(结果为负)
    • 正溢出:01
    • 负溢出:10
  • c.采用一位符号位,根据数值位的进位情况判断(异或)
    • 无溢出:最高位 与 次高位 进位相同
    • 溢出:最高位 与 次高位 进位相异

具体判别式见王道PPT(下图引用自王道ppt)

四、补充:无符号数的加减法运算

无符号数的加减法运算与上文中补码的加减运算原理几乎完全相同

1. 无符号数加减运算规则

加法:直接加。

减法:被减数不变,减数变为其补数(方法与补码加减运算中的[B]补 <--> [-B]补 一模一样)。减             法变加法。

2. 溢出判断

(1)手算判断:n bit 无符号整数表示范围为 0 ~ 2^n - 1 。看结果是否超出此范围。

(2)计算机判断溢出的方法:加法进1,减法进0

        加法溢出判断:最高位产生的进位为 1,则溢出。

        减法溢出判断:减法变加法后,最高位产生的进位为 0,则溢出。

五、补充:模2补码、模4补码的概念

首先,模2补码就是单符号位补码,所谓模4补码就是双符号位补码。所谓模2,代表其所能表示的最大的数是1,因此只需要一位符号位即可。所谓模4,代表其所能表示的最大的数值是3,因此需要2位符号位表示,即双符号位。

双符号位(模4补码)在加减法中比单符号位(模2补码)更容易判断溢出,因为双符号位只要不同就表示溢出,非常直观。

需要注意的是,双符号位补码在存储的时候只需要一个符号位,因为作为一个合法的双符号位数,其两个符号一定都是相同的(能存储的补码一定是正确的,不正确的数据只会作为临时数据存在CPU中,不会真的存储)。但是双符号位补码在运算的时候需要两个符号位。

六、小结

(1)无论对于 补码加减运算 还是 原码加减运算,其思想都是将减法转变为加法。只是 原码 和 补码 减法转变为加法的方式不一样。

(2)原码减法-->加法:符号位取反

补码减法-->加法:[B]补 -->  [-B]补

(3)补码的加减法不单独考虑符号位。

(4)原码和补码之间的转换、[B]补和 [-B]补之间的转换 的小tips要会用,经常会用到。

(5)溢出的判断经常考到,而又比较复杂,所以需要梳理清楚,不要记混了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值