当前位置 博文首页 > 文章内容

    计算机为什么需要反码,补码?

    作者:1663631723 栏目:IT新资讯 时间:2020-05-08 13:23:42

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



         一、为什么需要反码?

         反码的作用就相当于数学中的负数。

         对于小学生来说,会做的算术题是:5-3,但是不会做3-5。于是,我们上初中的时候,数学里就引进了一个新的概念:负数。引入负数之后,本来是减法的运算就可以变成加法来实现:

         3-5=3+[-5]=[-2],中括号代表“负数”,“负数”就是我们人为给出的数学术语。

         对于计算机来说,会做的算术题是:5+3,但是不会做3-5。于是,我们就在编码里引进了一个新的概念:反码。引入反码之后,本来是减法 运算就可以变成加法来实现:

          3-5=3+[-5]=[-2],中括号代表“反码”,“反码”就是我们人为给出的计算机术语。

          这里,你一定有一个疑问:为什么计算机只会做5+3,不会做3-5。这是因为在计算机的数字电路中只有加法器,没有所谓的“减法器”。不是说计算机厂商不会设计减法器,因为聪明的人既然发明了方法能够用加法来实现减法操作,那为什么还需要画蛇添足的弄一个减法器? 

          接着说:那么反码要怎么定义才能实现减法变加法的功能呢?聪明的人想的办法如下:

          1.正数的反码保持原码不变:3=[0_0000011]

          2.负数除最高位(正负符号位)外,全部取反(0变1,1变0):-5=1_0000101取反=[1_1111010]

          于是3+[-5]=[-2]的计算过程为:

          [0_0000011]+[1_1111010]=[1_11111101]

         这样,这种反码方法就成功实现了目标!至于为什么,我想只有数学家能给出解释了。

         二、为什么需要补码?

         都是因为“0”这个特殊数字的存在。

         先问你一个问题:0是正数还是负数?你肯定会说:0既不是正数也不是负数,这是我们初中学到的数学知识。这个回答没有问题,所以以后每次碰到0,人们都不会把它当正数或负数。

         那么计算机呢?计算机不同于人脑,计算机在碰到任何数字之前只根据最高位的符号位来判断正负性,“0”表示正数,“1”表示负数。

         前面我们推论了为何要用反码,那么用8位二进制反码表示的正数范围: +0 —— +127;负数范围: -127 —— -0。但是,其中有两个特       殊的编码会出现:

         0_0000000]=+0 (反码)

         [1_1111111]=-0 (反码)

     

         其实,+0和-0代表的都是0。这样一来,“0”这个数字在计算机中的编码就不是唯一的了。对于计算机来说,这是绝对不行的,因为任何数字都只能有1个编码。

         于是,聪明的人就做了这样一个决定:把0当成正数,也即+0,这样0的编码就变成:0_0000000。那8位二进制表示的正数范围仍然是: +0 —— +127。

         但是,对于负数就必须要做调整,也即-0必须要让位---1_1111111这个编码不能表示-0。我们可以把负数整体向后“挪动1位”:只要将8位二进制表示的负数范围从:-127 —— -0变成:-128 —— -1,就能成功解决问题。

     

         那么怎么整体挪动1位呢?方法就是反码+1。{1_1111111}编码就不再表示-0,而变成了-1。顺着推,最小的编码{1_0000000}就是-128。

    我们给这个反码+1又人为的取了一个新的名字,叫补码。于是乎,补码的定义如下:

     

         1.正数的补码保持原码不变:3={0_0000011}

         2.负数先求反码,然后再加1:-5=[1_1111010]+1={1_1111011}

         于是3+{-5}={-2}的计算过程为:

         {0_0000011}+{1_1111011}={11111110}

     

         至此,通过补码就成功解决了数字0在计算机中非唯一编码的问题,且也能实现减法变加法。

         所以,在计算机的世界里,0是正数。这点和我们学的数学不一样。

         {0_1111111}=+127 (补码)

         {0_0000000}=+0 (补码)

         {1_1111111}=-1 (补码)

         {1_0000000}=-128 (补码)

         less interests.more interest.






    文章来源:博客园

    文章链接:https://www.cnblogs.com/hmy-666/p/12551063.html#4570847

    如有侵权,请联系删除