计算机中 加减运算 的 实现原理

一,定点数 VS 浮点数
1,定点整数:x (x belong to 整数);
2,定点小数:0.x ;
3,浮点数:x.y (x != 0);

二,定点数的加/减法运算

定点小数/整数 相加,可以直接采用其原码形式 对其求和,即 x + y =》 [x] + [y] ,由于 正数的 “原,反,补码 相同“,所以 x+y => [x] + [y]
而 定点小数/整数 相减 时,首先需要将 定点整数/小数 转化为其 补码形式, **x - y =》 [x] + [-y]补**;

负数 x 求补方法 有如下几种:
1,x原码 符号位不变,数值位取反 求得[x] ,[x] 末尾加1,即为[x]
2,对[|x|] , 从右侧 到 左侧,第一个 1 及其 右边的 0 全部保留,经过第一个1以后,其左侧各位 均 取反;
3,通过 补码公式 进行求解;

1,补码 加减法 运算

1.1 补码加减法运算 规则

  • 补码 符号位要一起参与运算;
  • 对于 加减法 计算结果 中,超过 ”模“ 的部分 要将其舍弃;
    单符号位定点小数的模 为 2;单符号位定点整数的模 为 2n+1 ,n为 数值有效位;
    双符号位定点小数的模 为 22 ; 双符号位定点整数的模 为 2n+2 , n为 数值的有效位;

1.2 溢出 检测方法
加减法 运算结果 可能超出 机器字长,从而产生 溢出。对于 补码 加减法 运算,可以通过2种方式 检测 计算结果 是否发生溢出:
way1:采用双符号位 来 判断 运算结果 是否发生溢出(变形补码)
加减法运算中,真值 x , y的 补码 采用 双符号位 形式书写,且 其双符号位 均参与运算:
假设 Sf1 , Sf2 分别表示 双符号位的 高位 和 低位,运算结果中,不同Sf1 , Sf2 取值 将对应不同的 溢出结果:
Sf1 Sf2 result
0 0 没有溢出,结果为 正
0 1 结果溢出,结果应为 正
1 0 结果溢出,结果应为 负
1 1 没有溢出,结果为 负
conclusion1: 从上可知,在实际的电路设计中,我们可以通过 一个 “异或门” 来 判断 两个真值的运算结果 是否发生溢出:
if Sf1 XOR Sf2 == 1 , 则 运算结果发生溢出;
if Sf1 XOR Sf2 == 0 , 则 运算结果没有发生溢出;
conclusion2: 可以通过 最高符号位Sf1 来判断 运算结果的实际符号位,如果Sf1为 1,则实际符号位为 负,如果Sf1为 0,则实际符号位为正;
way2:采用单符号位 来 判断 运算结果 是否发生溢出
假设Cf,Co分别表示 符号位的进位,数值位的进位,则 可通过 判断 Cf,Co取值 来判断 运算结果 是否发生 溢出:
Cf Co result
0 0 没有溢出,结果为 正
0 1 上溢,结果 应为 正
1 0 下溢,结果 应为 负
1 1 没有溢出,结果为 负
**conclusion1:**在实际电路设计中,可以通过一个 ”异或门“ 来判断, 运算结果是否发生 溢出:
if Cf XOR Co == 1, 则 运算结果发生溢出;
if Cf XOR Co == 0, 则 运算结果没有发生溢出;
**conclusion2:**运算结果的实际符号位 以 Cf 为准,Cf == 1, 结果为 负;Cf == 0,结果为 正;

1.3 单位 二进制位 的 加法器
type1:半加器:计算结果 不考虑 进位
1 + 1 = 0;
1 + 0 = 1;
0 + 1 = 1;
0 + 0 = 0;
上述求和 公式 符合 ”异或“ 运算,因此,半加器 可以 通过 一个 ”异或门“ 来实现;
type2: 全加器:
一个全加器 包含 3个inputs, 2个outputs:
3个inputs 分别为:第i位的值 Ai , Bi,以及 上一位产生的进位 Ci-1;
2个outputs 分别为:第i位的计算结果 Si,以及 第i+1位 的 进位Ci+1;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值