补码怎么算,原码反码补码怎么算( 三 )


【X*Y】补=【X】补×【Y】补 , 即乘数(被乘数)相乘的补码等于补码的相乘 。
编辑本段补码的代数解释
任何一个数都可以表示为-a=2^(n-1)-2^(n-1)-a;
这个假设a为正数 , 那么-a就是负数 。 而根据二进制转十进制数的方法 , 我们可以把a表示为:a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2) , 第(n-1)位为符号位不计算在内 。
这里k0,k1,k2,k(n-2)是1或者0 , 而且这里设a的二进制位数为n位 , 即其模为2^(n-1),而2^(n-1)其二项展开是:1+2^0+2^1+2^2+……+2^(n-2) , 而式子:-a=2^(n-1)-2^(n-1)-a中 , 2^(n-1)-a代入a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)和2^(n-1)=1+2^0+2^1+2^2+……+2^(n-2)两式 , 2^(n-1)-a=(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n-3)+……+(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^0+1,而这步转化正是取反再加1的规则的代数原理所在 。 因为这里k0,k1,k2,k3……不是0就是1 , 所以1-k0,1-k1,1-k2的运算就是二进制下的取反 , 而为什么要加1 , 追溯起来就是2^(n-1)的二项展开式最后还有一项1的缘故 。 而-a=2^(n-1)-2^(n-1)-a中 , 还有-2^(n-1)这项未解释 , 这项就是补码里首位的1 , 首位1在转化为十进制时要乘上2^(n-1) , 这正是n位二进制的模 。
不能贴公式 , 所以看起来很麻烦 , 如果写成代数式子看起来是很方便的 。
注:n位二进制 , 最高位为符号位 , 因此表示的数值范围-2^(n-1)
--2^(n-1)
-1,所以模为2^(n-1) 。 上面提到的8位二进制模为2^8是因为最高位非符号位 , 表示的数值范围为0--2^8-1 。
补码的基本运算 补码相加后的结果:1010 1100 是答案的补码,要转化成原码,才是最终答案.
补码转原码方法同原码转补码,即符号位不变,其余按位取反后+1
1010 1100
求反:1101 0011
求补:1101 0100
即:-84
这里用到了补码的运算规则:[X+Y]补=[X]补+[Y]补
求出[X]补+[Y]补后还要求一次补,才能得到答案X+Y
扩展资料:
补码运算原理: 在计算机里 , 如果我们要计算5-3的值 , 我们既可以用5减去3 , 也可以用5加上13 。
这就像我们的钟表 , 它从1点走到12点之后 , 又回到了1点 。 我们的计算机也是 , 从0走到15之后 , 再往下走就又回到了0 , 就像我们转了一个圈一样 。 我们从5这个位置往回退3个格 , 就完成了5-3这个计算 。
我们也可以从5这个位置往前走 , 一直走到15 , 这时我们走了10个格 , 然后我们继续往前走 , 走到0 , 然后到1 , 然后就走到了2 。 这样 , 我们往前走了13个格之后 , 也到了2这个位置 。  
所以说 , 在我们这个计算机中 , 减3和加13是一样的 。 而3+13=16 , 我们说在模16的系统下 , 3和13是互补的 。  
这样 , 我们计算5-3就可以换成5+13 。 3的二进制表示为0011 , 5的二进制表示为0101 。 这样 , 0101-0011就可以表示为0101+(-0011) 。  
我们在计算机中都是把负数用其补码表示 , -0011的补码就是10000-0011(即16-3 , 也就是13) 。 10000-0011=1+1111-0011=1+(1111-0011)=1+1100=1101 。
我们总说补码是“按位取反再加一” , 看了上面这个式子相信大家就会明白了 , 其实就是把10000-0011换成了1111-0011再加1的形式 。
然后 , 0101-0011就换成了0101+1101 , 它们计算出来的结果为10010 。 由于我们的计算机只有四个bit , 所以结果为0010 。 即 , 在模16的计算机中 , 5-3=5+13=2 。  

推荐阅读