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

二进制补码

发表于: 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

    震惊

    震惊

编辑推荐
由于计算机内部通常用补码来表示二进制数。 正数:原码=补码=反码 负数:补码=反码+1 52的二进制 原码
这里先将二进制的计算可以分为两类,加减运算与乘除运算,本篇讨论的是加减运算。 (一)预备知识—
图上第一行signed char 占了8位,其中一位是符号位。其余7位是数字位,可以存2的7次方个数(0~127共
   1.补码与真值得转换公式      补码乘法因符号位参与运算,可以完成补码数的“直接”乘法,
#define MAX 32 void IntToBinary(char binary[], int x); // x转换为二进制 void IntToBinary2(cha
1.计算机中任何东西都用0,1两个数表示 2.计算机中0表示正,1表示负 3.计算机中有原码,反码,补码
1.计算机中任何东西都用0,1两个数表示 2.计算机中0表示正,1表示负 3.计算机中有原码,反码,补码
原码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。 比如如果是8位二进制: 反码:
有符号数据表示法 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补
完全可以用一两句话就描述的很清楚。 原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号