二进制补码

http://hanlsheng.iteye.com/blog/546238

http://winhonourxzg.iteye.com/blog/466195

实际上,我们要证明的是,X-Y或X+(-Y)可以用X加上Y的补码完成。

Y的补码等于(11111111-Y)+1。所以,X加上Y的补码,就等于:

X + (11111111-Y) + 1

我们假定这个算式的结果等于Z,即 Z = X + (11111111-Y) + 1

接下来,分成两种情况讨论。

第一种情况,如果X小于Y,那么Z是一个负数。这时,我们就对Z采用补码的逆运算,求出它对应的正数绝对值,再在前面加上负号就行了。所以,

Z = -[11111111-(Z-1)] = -[11111111-(X + (11111111-Y) + 1-1)] = X - Y

第二种情况,如果X大于Y,这意味着Z肯定大于11111111,但是我们规定了这是8位机,最高的第9位是溢出位,必须被舍去,这相当于减去100000000。所以,

Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y

这就证明了,在正常的加法规则下,可以利用补码得到正数与负数相加的正确结果。换言之,计算机只要部署加法电路和补码电路,就可以完成所有整数的加法。

(完)

精彩评论:

Z = X + (11111111-Y) + 1式子可以写为Z = X - Y +100000000,这在硬件上可以理解为两部分电路来实现,第一部分是前面的X - Y(这里姑且不管计算的结果是正还是负),第二部分是X - Y计算的结果再和100000000相加,最终得到计算的结果Z, 而在8位的计算机上100000000是不能出现的,其实这时100000000就相当于00000000(舍去了最高位),然后我们再看一些计算的过程:
Z = X + (11111111 - Y) + 1
= X - Y + 100000000
= X - Y + 00000000
= X - Y

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值