二进制补码的由来

        从前,在我们的生活中,如果我们家里有两个一模一样的篮子,每个篮子装满也只能装2个同样大小的苹果。然后,我们把这两个篮子并排放置在一张圆桌上,供自己随时享用。

        忽然,有一天,我们有的人(就叫这个人~小王)肚子突然饿了,于是,就随手(我们有的是左撇子,有的是右撇子,还有的是双手都很灵活的)拿了这两个篮子里的其中一个苹果吃了,接着就出去玩去了。

       等过了一段时间,小王再回到家的时候,咦!发现,怎么少了一个苹果?是自己吃了呢?还是被别人给偷走了?小王也记不清楚是不是他自己吃的了。再加上,当时小王自己是站在圆桌前的哪一面去拿的苹果,他也分不清楚了。因为,如果小王是右撇子,又是他自己吃的话,一般都会随手先拿起他右手边的苹果来吃。但是,桌子是圆的,他也忘记了,当时他自己面对着这两篮子苹果的时候,到底是面朝哪个方向的了。因为,并排着摆在圆桌中间的两个篮子,样子都非常地相似,而且都装着相同数量,且颜色和大小又几乎相同的苹果。如果是右撇子话,从这一面随手(用右手)拿来吃的话,那走到另一面去看的时候,就会发现,是他左手边的苹果被拿走了,而这个情况,是左撇子(拿东西的时候,会习惯性地随手先拿起左手边的东西)用手的习惯。然而,小王他自己又不记得自己吃没吃过这个苹果了,所以,就会怀疑是不是哪一个左撇子偷了他的苹果。

       因此,这个事情,给我们造成了很大的困扰。为了防止这样的事情再度发生,我们就采用了标记的方法来帮助记忆。于是,比如,如果哪个家庭最多只需要有4个苹果,就可以度过日子的话,就会做一大一小的两个篮子,大篮子装满,可以装2个差不多大小的苹果,小篮子装满,则只能装这样的1个苹果,接着,再去找4颗鹅卵石备用,来作为标记。

       那么,如果是习惯用右手的人,一般都会把大篮子摆放在他自己的左手边,小篮子摆放在大篮子的右边,也就是他自己的右手边,然后,先从苹果数量少的小篮子吃起,因为右撇子习惯先从右手边拿起东西。而习惯用左手的人,一般都会把大篮子摆放在右手边,小篮子摆在左手边,然后,先从苹果数量少的左边的小篮子吃起,因为左撇子一般都习惯先从左手边拿起东西。

      下面,假设小王是一个右撇子:

       然后,有一天,小王发现,他家里的两个篮子都没有东西了,都是空的,此时记为:( 000  最左边的那一个数字 0 表示 >> 在大篮子的左端不放鹅卵石。也即表示:没有欠邻居们的苹果,就只是小王的家里没有苹果了)。于是,小王就出去摘苹果去了。

      过了一会儿,小王摘了4个苹果回来,他自己先吃了1个,再把这两个篮子给装满(大篮子装满了2个苹果,小篮子装满了1个苹果),家里总共就还剩下3个苹果,记为( 011 即:+3 ,这里面左边的第二位的数字 1 表示 >> 大篮子是装满的状态,第三位那个数字 1 表示小篮子也是装满的状态)。

        又过了一会儿,小王肚子又饿了。(*#*)于是,小王就走到圆桌前,他面朝这两个篮子的时候,小篮子是在他的右手边的。于是,小王随手就拿起他右手边小篮子里的那1个苹果吃了。这个时候,小王家里还剩下大篮子里面的2个苹果。此时,大篮子还是处于装满苹果的状态,小篮子已经是空着的状态了,此时记为(010  即: +2)。

        然后,又过了一段时间,小王的肚子又饿了。于是,又拿起大篮子里面的1个苹果吃了。这个时候,大篮子里只剩下最后 1 个苹果了。然而,1个苹果是装不满大篮子的,于是,就把剩下的那1个苹果放到了小篮子里面,让小篮子处于装满的状态。(*#*)因为,如果是家里还有苹果的时候,让每一个篮子都处于空着或者已满的状态,才是有助于记忆的。那么这个时候,大篮子是空着的状态,小篮子是处于装满的状态的,记为(001 即:+1)。

        再过了一会儿,小王把最后的那1个苹果也吃了。这个时候,小王家里的两个篮子全都是空的了,此时记为:(000 即:0)。

        接下来的日子,事情发生了变故。小王当晚辗转难眠,第二天早上起来的时候,他发现自己的喉咙疼痛难忍,而且浑身无力。是的,小王发烧了!然而,又好巧不巧,这个时候,小王家里的苹果,他自己昨天已经都吃完了,现在,他这个身体状况,也不能出去采摘苹果。但是,也不能待在家里等着饿死吧。

        于是,小王就向他的一个邻居借了1个苹果来吃了,补充体力的同时,也是在提高他自己的免疫力来对抗疾病,让他自己的病好得快一点。那毕竟,借人的东西,总是要还的嘛,也不能忘了,是吧。同时,还也要提醒自己,借人家的东西,也是有限度的,毕竟,自己的偿还能力也是有限的。于是,小王就在大篮子的左边的桌面上,放了1颗鹅卵石。(*#*)表示:现在小王家里是处于借苹果维生度日的状态。再在大篮子里面放了2颗鹅卵石,小篮子里面放了1颗鹅卵石,这两个篮子里面鹅卵石的数量,是小王还能再借到的苹果的数量。此时记为:(111 即:-1  第一位数字 1 表示:已经在大篮子的左边放置了1颗鹅卵石,此时,处于借苹果过日子的状态。第二位和第三位的数字 1 则表示:大篮子里面放置的2颗鹅卵石和小篮子里面放置的1颗鹅卵石,让这两个篮子处于可以满借的状态,这样也才有助于记忆。所以,以小王自己的偿还能力,最多还能再借到3个苹果。-1 则表示:目前,小王总共已经欠了邻居的1个苹果)。于是,就这样度过了这难熬的一天。

        第二天,小王起来的时候,发觉自己的身体还有些不舒服,还不能出去采摘苹果。于是,他又向另外一个邻居借了1个苹果来吃,再把小篮子里面的那1颗鹅卵石拿走,剩下大篮子里面的那2颗鹅卵石,记为:(110 即:- 2  此时,大篮子里面还有2颗鹅卵石,处于可以满借的状态,表示,小王最多还能再借2个苹果。  - 2 则表示:小王总共已经欠了邻居们的2个苹果)。

        到了第三天,小王还是没有恢复得够好,还不好出去采摘苹果。于是,小王又向第三个邻居借了1个苹果来吃。之后,再把大篮子里面的1颗鹅卵石拿走,剩下的那1颗鹅卵石,因为放在大篮子里,不是处于可以满借的状态,所以,取出来放到了小篮子里面,让小篮子处于可以满借的状态。此时记为:(101 即:- 3  表示:第二位数字 0 表示,大篮子里面已经是空的了,说明,有2个数量的苹果是自己借不到的了。第三位数字 1 表示,小篮子处于可以满借的状态,说明,自己最多还能再借1个苹果。- 3 则说明,小王总共已经欠了邻居们的3个苹果了)。

        到了第四天,小王的身体恢复过来了一些。虽然还没有痊愈,但是,小王补充一下体力,还是可以去采摘苹果的,毕竟,总不至于总是借苹果度日吧,这样好吃懒做,借别人的东西,总有借到头到时候,不是长久之计。于是,小王向第四个邻居也借了1个苹果来吃了,再把小篮子里面的那1颗鹅卵石拿走。最后,就只剩下大篮子左边桌面上的那1颗鹅卵石了。此时记为:(100 即: - 4  表示:小王总共已经欠满了4个苹果,而且再也不能向邻居们借苹果了,因为借人东西的数量,超过自己的能力范围内,能获得的东西的数量越多,到时候,偿还起来也是越困难的)。

       于是,小王吃过苹果后,有了一些体力,就出去采摘苹果去了。但是,因为是大病(发烧,在当时是很要命的病症)初愈,所以,小王这一天没有用多少时间去采摘苹果,所以小王只采摘到了1个苹果就回来了,这1个苹果是留着给他自己第二天来吃的。(*#*)于是,小王把这1个苹果放到了小篮子里面去,同时,又放入1颗鹅卵石。记为:(100 即:- 4 表示:如果第二天小王自己吃了这1个苹果,那小王总共就还欠他的邻居们4个苹果,而且不能再借苹果了)和(101即:- 3  表示:如果第二天小王把这1个苹果拿来还给邻居,那小王总共就还欠他的邻居们3个苹果,同时也表示,最多还可以再借1个苹果),此时处于一种,要么 - 4,要么 - 3 的叠加态。因为,小王也说不好邻居会不会有什么急用,来催要还苹果,明天自己吃不吃得到这1个苹果,也都很难说。

        到了第五天,早上起来,小王发现自己的身体又好多了一些,而他的邻居们都没有来催要还苹果。于是,小王吃过小篮子里面的那1个苹果后,体力恢复了好多,精力也充沛了好多。(*#*)而在拿出这1个苹果出来吃的同时,也把小篮子里面的那1颗鹅卵石也拿走了,表示,自己已经吃了这1个苹果,就不能拿这 1 个苹果来还给邻居了。此时记为:(100 即:- 4  总共仍旧欠邻居们4个苹果)。然后,就去采摘苹果去了。

       很幸运的是,这次小王采摘到了3个苹果,他自己当时就吃了1个苹果,补充一下能量,也是出于滋养身体的需要。回来之后,小王还了1个苹果给其中的一个邻居,自己又留了1个苹果,等明天早上起来时吃的。于是,小王就把这1个苹果放进小篮子里面,同时把2颗鹅卵石,放进了大篮子里面。(*#*)此时记为:(101 即:- 3  表示:小王已经还了1个苹果,总共还欠邻居们的3个苹果,最多还能借1个苹果。而这1个留在家里的苹果,是给他自己明天吃的)和(110  即:- 2 表示:这1个苹果是要拿来还给邻居的,还了之后,就只欠邻居们2个苹果了,同时,也表示他还可以再借2个苹果。但是这也意味着,小王明天早上起来,就没有的吃的了),此时处于 - 3 和 - 2 的叠加态中。所以,这种情况就是:欠邻居的苹果的总数量处于 3个和 2个之中,这1个留下来的苹果,如果是拿来自己吃的话,就还欠邻居们3个苹果;如果是拿来还给邻居的话,就还欠邻居们2个苹果。到底是拿来还给邻居,还是自己拿来吃,明天都还没到来,谁也不好说。

        到了第六天,早上醒来,邻居们也又都没来敲门催要还苹果。所以,小王从小篮子里取出了那1个苹果吃了。(*#*)这个时候,小篮子里面是空的,大篮子里面有2颗鹅卵石,而这1个苹果是自己吃的,没有拿来还给邻居,所以,吃掉这个苹果的同时,就从大篮子里面,拿出了1颗鹅卵石,剩下的那一颗鹅卵石,则放到了小篮子里面,此时记为:(101 即:- 3  即:小王仍欠邻居们都的3个苹果)。但是,如果有一个借给过小王苹果的邻居,两天都没吃东西了,这个邻居突然想到,曾经借给过小王一个苹果,于是,就来问小王能不能还这1个苹果?那如果小王把这个苹果还给这个邻居的话,此时就记为:(110 即:-2  总共还欠邻居们2个苹果)。但是,这样的事情没有发生,所以,小王吃过这1个苹果,调整好篮子的记数后,就去采摘苹果去了。

        (*#*)像这种叠加态,如果是小王自己吃的这个苹果,那这些篮子里面,被自己吃掉的苹果和标记用的鹅卵石,是按照相同的数量相抵相消的。而如果这个苹果,是小王拿来还给他的邻居的,那还回的苹果数量和增加的可再借苹果数量也是相同的。而且这两种情况,都是同时发生的。

        这一天,小王也很走运,采摘到了4个苹果。当时小王自己就吃了1个,回来之后,还了2个给邻居们,剩下的那1个苹果则放进了小篮子里面,同时,又放入1颗鹅卵石。而此时,小王总共已经还了3个苹果,所以,还可以借3个苹果。于是,在大篮子里面又放入了2个鹅卵石,此时记为:(111 即: -1  表示:小王已经还了3个苹果,这次采摘,剩下的那1个苹果是拿来自己明天吃的,如果是这种情况的话,小王还能再借3个苹果) 和 (000 即:0  表示:剩下的那1个苹果是拿来还给邻居的,如果是这种情况的话,小王就还清了小王之前邻居们借的苹果。这时,要全部拿走这些篮子里面的鹅卵石,和放在大篮子左边桌面上的,用来标记”已经处于借苹果度日状态“用的那一颗鹅卵石)。

        接下来,小王的日子过得越来越顺,也越来越好。因为,有了这段经历,小王明白了一个道理:在自己身处顺境的时候,不要大吃大喝,也不要过度消费,要学会未雨绸缪,也要学会感恩,在自己能帮助到别人的时候,就去帮助他人,因为,也不知道,如果哪天自己也像这次一样,有需要得到帮助的时候,那大多数时候,也就是自己曾经帮助过的人才会帮助得到自己了。毕竟,这个世界也是有来有往的,造恶因,就会得恶果;种善因,也皆有回报。而这个果,也可能是以另一种形式或者方式,而前来的。

那么,这整个过程也就是:

100     -4

                     -4 ~ -3   (所谓的叠加态)

101     -3

                     -3 ~ -2   (所谓的叠加态)

110     -2

                     -2 ~ -1   (所谓的叠加态)

111     -1

                     -1 ~  0  (所谓的叠加态)

000      0

                                 (这里也会有叠加态,比如,有邻居来借苹果,或者来还苹果。这个时候,把1颗鹅卵石放在小篮子的右边,表示总体有盈余,也就是说,别人借小王的苹果数量,要多于小王借他人的苹果数量,也即是,总体为非负数)

001     +1 

                                                      *

010     +2

                                                      *

011     +3

取整,排除叠加态的情况之后,得到下列式子,这些二进制数,就是计算机的补码,及其分布的形式:

  .        -n

  .        .

  .        .

1011     -5    

  100     -4

  101     -3

  110     -2

  111     -1

  000     0

  001    +1

  010    +2

  011    +3

0100    +4

  .        .

  .        .

  .       n-1

-n  ~  n-1   为x位计算机所能表示的2n个整数的范围。则有:2^x=2n

(运用数学中模的方式,也可以推演证明出计算机补码的形式。前段时间,我已经推导出来了,不算多,改天,有时间再整理一下,发到这里)

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值