补码乘法的溢出判断

补码乘法的溢出判断

两个w位补码x和y, x × y = [ x × y ] x\times y = [x\times y] x×y=[x×y],一般结果用 2 w 2w 2w位补码保存结果,然后进行截断保留低 w w w

判断补码溢出的方式是:假设 2 w 2w 2w位结果为s = s 2 w − 1 s 2 w . . . s 1 s 0 s_{2w-1}s_{2w}...s_1s_0 s2w1s2w...s1s0,则高w+1位 s 2 w − 1 s 2 w . . . s w − 1 s_{2w-1}s_{2w}...s_{w-1} s2w1s2w...sw1必须全0或全1才不会溢出,否则会溢出

表层理解:类比补码的符号扩展,当 w w w位的补码需要扩展为 2 w 2w 2w位,当补码最高位(符号位)为1则扩展的高 w w w位全1,否则全0。反过来看,对补码进行截断,若截断的高位全1或全0不影响精度,反之会影响精度。与补码溢出的判断方式吻合

数学证明

  1. 2 w 2w 2w位结果看作: 高w位用补码表示成 v v v,低w位用无符号整形表示成 u u u,则 s s s可写作
    s = 2 w v + u s = 2^wv + u s=2wv+u
  2. 将u看作由n位补码p转换来的: u = p + p w − 1 2 w u = p + p_{w-1}2^w u=p+pw12w
  3. 结合1、2式,有: s = 2 w v + p + p w − 1 2 w = p + ( v + p w − 1 ) 2 w s = 2^wv + p + p_{w-1}2^w = p + (v+p_{w-1})2^w s=2wv+p+pw12w=p+(v+pw1)2w
  4. 此时,当 ( v + p w − 1 ) = 1 (v+p_{w-1}) = 1 (v+pw1)=1时,s会发送溢出,v表示s的高w位, p w − 1 p_{w-1} pw1是s的第w位。当v全0, p w − 1 p_{w-1} pw1全0时v全1, p w − 1 p_{w-1} pw1全1时,显然有 ( v + p w − 1 ) = 0 (v+p_{w-1}) = 0 (v+pw1)=0,此时不会溢出,与上述的判断补码溢出方法一致

参考:《深入理解计算机系统》

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值