定点数的加减运算及实现

一、补码加减运算

求补运算:将原码包括符号位在内每一位取反,末位加1。

1.1 补码加减运算方法

  1. 方法:
    [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [ X − Y ] 补 = [ X ] 补 + [ − Y ] 补 \begin{aligned} [X+Y]_补&=[X]_补+[Y]_补\\ [X-Y]_补&=[X]_补+[-Y]_补 \end{aligned} [X+Y][XY]=[X]+[Y]=[X]+[Y]

  2. 使用补码进行加减运算,符号位和数值位一样参加运算

  3. 补码的减法可以用加法来实现,任意两数之差的补码等于被减数的补码与减数相反数的补码之和。

1.2 补码加减运算的溢出判断

  1. 溢出:当运算结果超出机器数的表示范围时,称为溢出。计算机必须具备检测运算结果是否发生溢出的能力,否则会得到错误的结果。

  2. 对于加减运算,可能发生溢出的情况:同号(两数)相加,或者异号(两数)相减。

  3. 确定发生溢出的情况:
    正数相加,且结果符号位为1;
    负数相加,且结果符号位为0;
    正数-负数,且结果符号位为1;
    负数-正数,且结果符号位为0;

1.3 常用的判溢方法

  1. 单符号位判溢:当最高有效位产生的进位和符号位产生的进位不同时,加减运算发生了溢出。
  2. 双符号位判溢: X X X Y Y Y采用双符号位补码参加运算,正数的双符号位为 00 00 00,负数的双符号位为 11 11 11;当运算结果的两位符号 S f 1 S_{f1} Sf1 S f 2 S_{f2} Sf2不同时( 01 01 01 10 10 10),发生溢出。

二、机器数的移位运算

2.1 三种移位运算

移位解释
逻辑移位将移位的数据视为无符号数据,各数据位在位置上发生了变化,导致无符号数据的数值(无正负)放大或缩小。
算术移位将移位的数据视为带符号数据(机器数)。算术移位的结果,在数值的绝对值上进行放大或缩小,同时,符号位必须要保持不变。
循环移位所有的数据位在自身范围内进行左移或者右移,左移时最高位移入最低位,右移时最低位移入最高位。

2.2 补码的算术移位

  1. 算术左移:符号位不变,高位移出,低位补0。
    (1)为保证补码算术左移时不发生溢出,移位的数据最高有效位必须与符号位相同。
    (2)在不发生溢出的前提下,用硬件实现补码的算术左移时,直接将数据最高有效位移入符号位,不会改变机器数的符号。
  2. 算术右移:符号位不变,低位移出,高位正数补0,负数补1,即高位补符号位。

三、移码加减运算

3.1 移码和移码计算

[ X ] 移 + [ Y ] 移 = 2 n + X + 2 n + Y = 2 n + [ X + Y ] 移 [ X ] 移 + [ − Y ] 移 = 2 n + [ X − Y ] 移 \begin{aligned} [X]_移&+[Y]_移=2^n+X+2^n+Y=2^n+[X+Y]_移 \\ [X]_移&+[-Y]_移=2^n+[X-Y]_移 \end{aligned} [X][X]+[Y]=2n+X+2n+Y=2n+[X+Y]+[Y]=2n+[XY]

3.2 移码和补码混合计算

[ X ] 移 + [ Y ] 补 = 2 n + X + 2 n + 1 + Y = 2 n + 1 + ( X + Y + 2 n ) = 2 n + 1 + [ X + Y ] 移 \begin{aligned} [X]_移+[Y]_补&=2^n+X+2^{n+1}+Y\\ &=2^{n+1}+(X+Y+2^n)\\ &=2^{n+1}+[X+Y]_移 \end{aligned} [X]+[Y]=2n+X+2n+1+Y=2n+1+(X+Y+2n)=2n+1+[X+Y]

3.3 移码运算结果判溢

  1. 判断条件:当结果的最高符号位 S f 1 = 1 S_{f1}=1 Sf1=1时溢出, S f 1 = 0 S_{f1}=0 Sf1=0时结果正确。
    (1) S f 1 S f 2 = 10 S_{f1} S_{f2}=10 Sf1Sf2=10时,结果正溢出;
    (2) S f 1 S f 2 = 11 S_{f1} S_{f2}=11 Sf1Sf2=11时,结果负溢出。
  2. 由于移码运算用于浮点数的阶码,当运算结果正溢出时,浮点数上溢;当运算结果负溢出时,浮点数下溢,当作机器零处理。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值