二进制位两数相加,加数补码的合理取值范围

By Mejias Tse

Module

 -4

=256 - 4

=1 0000 0000 - 0000 0010

=(1 + 1111 1111) -0000 0010

= 1 + (1111 1111 - 0000 0010)

-x

=256 - x   /* x的补码,module - x

=(1 + 1111 1111) -x

=1 + (1111 1111 -x)

= 1 + x按位取反

由以上可知,x的补码为1 +( x的按位取反)

正数(含0)+正数(含0)

        情况一:不存在进位,和为正数(含0)

已知一个数为x,另一个数y的取值范围为(0 0000) <= y <= (max 0 1111 -x)

(0 <= x <= max 0 1111) + (0 <= y <=(max 0 1111- x) )

0 <= (x + y) <= max 0 1111

        情况二:进位,溢出

已知一个正数为x,另一个正数y的取值范围为( 0 1111 -x) <= y <= 0 1111

(0 <= x <= max 0 1111) + ( (0 1111- x)  < y <= 0 1111)

(0 1111- x + x) < ( x + y)  <= ( 0 1111 + 0 1111 )

0 1111 < (x + y)  <= 1 1110

由以上可知,已知正数x

另一个正数y的取值范围为 <=0 1111 - x时,不存在进位,和为正数

另一个正数y的取值范围为 >0 1111 - x时,存在进位,溢出

负数 + 负数

        情况一:进位舍弃仍为负数

已知一个负数为x,另一个负数y的取值范围为(min 11 0000 - x) <= y <= 1 1111

(min1 0000 <= x <= max 1 1111) + (min11 0000 - x) <= y <=max 1 1111)

(Min 11 0000 - x + x) <= (x + y) <= (1 1111 + 1 1111)

11 0000 <= (x + y ) <= 11 1110

/*到这一步证明存在进位

(11 0000 -module 10 0000 ) <= (x + y) <= (11 1110 - module10 0000)

/*进位后的数值大于module时,可减去module或module的倍数

1 0000 <= (x + y) <= 1 1110

/*到这一步证明不溢出

        情况二:进位溢出

已知一个负数为x,另一个负数y的取值范围为(1 0000 <= y < 11 0000 - x)

X + < (11 0000 -x)

(min1 0000 <= x <= max 1 1111) + (min1 0000  <= y < 11 0000 - x)

(Min1 0000 + min 1 0000) <= (x + y) < (1 1111 + 11 0000 - x)

10 0000 <=(x + y) <= (110 1111 - X)

/*到这一步证明存在进位

(10 0000 -module 10 0000)  <=(x +y ) <(110 1111 -x -module 10 0000* 10)

/*进位的数值大于module时,可减去module或module的倍数

0 <= (x+y) < (10 1111 - x)

0 <= (x + y) < (10 1111 - 1 1111)

0 <= ( x + y) < 1 0000

/*到这一步证明溢出

由以上可知,已知负数X

另一个负数的取值范围为>=11 0000 - x时,进位舍弃为负数,不溢出

另一个负数的取值范围为 <11 0000 - x时,进位舍弃,溢出

一正一负

(0 <= x < =max 0 1111) +( 1 0000 <= y <= max 1 1111)

1 0000 <= (x + y) < = (10 1110 - module 10 0000)

1 0000 <= (x+y) <=  0 1110

由以上可知,一正一负最终结果为负数或正数,且不可能溢出

综合上述的描述:

已知正数补码为x,另一个加数为正数时,其补码合理取值范围是<=0 1111 - x

另一个加数为负数时,其补码为默认负数补码的取值范围

已知负数补码为x,另一个加数为正数时,其补码为默认正数补码的取值范围

另一个加数为负数时,其补码合理取值范围为>=11 0000 - x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值