当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

二进制补码

发表于: 2010-04-01   作者:cywhoyi   来源:转载   浏览:
摘要: 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 =

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

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号