补码运算

  

补码如何实现 由减到加: 

  首先,我想讲 一个故事:

       话说,战国时期 季梁遇到一个 赶着车向北走的人,于是季梁就问他,“你要去哪里啊?” 那人就说 "楚国"于是季梁又问,"可是

     楚国不是在南方吗?" 那人又说“没关系,我的马好。"

       其实,那人就给出了我们补码的思路,你要去南方,可以直接向南方去,也可以一路向北,绕地球一圈,从而到达楚国。

  补码也是这样 ,因为计算机的定长表示,所以补码的取值范围是有周期的 

    如 :[127]补=0111 1111 再加一的话,就是 0000 0000  零了

  为了便于理解可以用时钟计算(12小时制的)

  9要拨到5,可以减4,也可以加8 ,所以此时 -4和+8是等价的  。

  那么 ,我们可以认为 8是4的补码

  那么这两个数有什么联系呢? 没错他们和在一起就绕了时钟一圈,用数学表达的话就是 两数的相加的绝对值 为 12

  类比到补码  首先的明白一圈是多少 ?(这个我解释不了,是试出来的)一圈为128 ,

  于是用  128减真值 也就是所谓的 数值位取反,末位加一  的操作了。

  再回到时钟, 9-4=9+[4]补=(9+8)%12    因为他会多走一圈,所以我们再在这里还要 %12,而计算机补码是有周期的,不用这一步

  那么现在我们就可以推出   x-y=x+[y]补

 补码运算规则:

  加法规则:[x+y]补=[x]补+[y]补

  减法规则:[x-y]补=[x]补+[-y]补

  1,[-y]补为将[y]补 全部取反末位加1 得

  2,溢出:运算结果超出可表示范围

  3,溢出的判断:最高两位向上进/借位不同则该运算溢出

  4,补码求原码:与原码求补码操作一样 ,a-b=c,则a-c=b  ,另外也可以逆推 -1再取反

       

原文地址:https://www.cnblogs.com/asdfknjhu/p/12083172.html