补码运算

  

补码如何实现 由减到加: 

  首先,我想讲 一个故事:

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

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

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

 

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

    如 : 0111 1111 的真值是 127,再加一的话,就是 1000 0000,真值为 -128 了。

 

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

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

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

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

  类比到补码  首先的明白一圈是多少 ?

  在八位的补码中,有一位是表示符号位,所以表示数值的有 7 位,即  2^7 = 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再取反

 

 

 ========== ======== ======== ======== ====== ===== ===== === == =

  白鹿洞二首·其一   王贞白(唐)

读书不觉已春深,一寸光阴一寸金。
不是道人来引笑,周情孔思正追寻。

 

       

posted @ 2019-12-23 13:00  叫我妖道  阅读(3738)  评论(0编辑  收藏  举报
~~加载中~~