关于补码,原码,反码的思考--嘟嘟胖

       关于补码,原码,反码的问题,说简单,很简单,基本人人都会算,会求解  可是没几个人能对这几个概念的来龙去脉搞得清清楚楚,明明白白的. 比如, 为什么引入编码,为什么引入原码,又为什么引入反码. 反码存在的意义是什么,补码的引入原因,为什么补码能够把符号位一起运算?补码的优势到底在哪里?我们应该对问题多多思考,多想几个为什么. 如果你搞不懂来龙去脉,恐怕后面的操作几乎可以把你搞得晕头转象,好象懂了,会做题了.可是心理总觉得没吃透,对吧??
      下面我把我的思考分享给大家:
      计算机的基本功能是对信息进行处理.所以我们引出了一个重要的概念  信息表示的数字化,包括 信息的表示 ,信息的存储,信息的转化,信息的加工,信息的传送,和对这些过程的控制.
       首先,我们把重点放在 信息的表示,计算机中进位记数制,我想应该都明白为什么用二进制吧? 然后我们就需要对它进行编码? 为什么要进行编码呢,在人脑中只是约定了 +为正数, -为负数,就可以在人脑中进行高度抽象的运算了,但是,在 计算机中不行啊,计算机很傻的,计算机中的任何行为都依赖于它的物理结构,它没有思维的. 所以你必须告诉它什么是正,什么是负! 所以我们必须进行编码,以区分正负.

原码的出现与衰落

        最开始的时候,人们约定在数前面第一位用做表示符号的位, 1表示负 0 表示正. 他们称之为原码. 很不错,可以成功的区分出正负了.  可是马上就意识到它的一些局限性了.
       1  加减的不方便,  符号位需要单独处理,单独判断.同0相加或相减,那好判断. 可异号呢? 那就涉及一个判断是否够减的逻辑了.很难做到.

       2  +0 表示为 0000 -0 表示为 1000  ,这就存在二义性了,计算机中是绝对不能容惹二义性的东西存在的.

补码的大放光彩
        
       原码的缺点使人们要找出一种新的编码,这种编码就是补码.首先它必须继承原码的特点(可以表示正负)而且它至少应该有两个优点,可以把符号位一起运算和0没有二义性.怎么才能做到呢? 如果是你,你能创造出这种编码吗?
       在日常生活中,我们发现时钟有这样一个特点,就是以12为模,13点是多久呢?舍弃模12 大家都知道就是1点了. -1 点也就是11点. 两者是完全等价的,因为它们有模12. 通过这个特点可以做什么?  大家注意了,可以变减为加啊,比如:-1点再过5个小时是几点, -1+5=4点,我们可以这样变换  (-1+12)+5=4  ,你会发现这个等式是不是错了?应该是16对啊,你错了,满12就已经溢出了,只剩下4.
       而计算机是否也有这个特点呢?答案是肯定的,实现模运算的基础显然就是寄存器的长度是固定的.那么变减为加那就算是实现了.例如82-54=82+46=(1)28  ,那么到底是怎么样才能把符号位一起运算呢?我们知道正数的补码就是本身,负数的补码就变反加一. 我们来举个例子  比如异号想加 A-B=87-25,我们把它转换成补码=0(87)+1(75)=062,嘿嘿,发现没有 符号位一起运算了.结果为62,再来,把它反过来 25-87 ,转换成补码0(25)+1(13)=1(38),这里有的同会说,不对了,结果不应该是-38. 你再仔细看看,我提示下补码+补码=? ,也是等于补码啊,1(38)的真值是-62,对吧?  完全可以把符号一起运算.
       最关键的部分就在这里了, 把符号位一起运算的理论依据是什么,什么样的编码可以连同符号位一起运算,而原码为什么不能把符号位一起运算? 经过我一天一夜的思考 :),大家看看这样理解对不对. 数 A ,有正有负,对吧? 也就是A+(-A)=0 ,哈哈,就是它了,我们设A=0001,你看原码,A=00001,-A=10001,A+(-A)=10010,哈哈1+(-1),变成-2了,再看补码 00001+11111=00000,哈哈,完全正确,你如果再要去想为什么,也很简单了一个数加去它的补数=什么? 当然=模了,模的定义就是模减去一个数的结果就是这个数的补数. 等于模了,舍去模,那不就变成0 了.  这就是连同符号位一起运算的依据.
       你还会发现一个特点,这个特点在我们物理上的具体实现时是相当重要的.请看原码 0001=0000000001,而1001是否等于111111111001呢,很明显是不可能的. 而补码1001绝对是等于1111111001的,不信你算算看,这个性质就叫符号的 可扩充性.
       
反码的出现原因

       哈哈,补码很明显是我们的最佳选择了,为什么又弄一个叫反码的东西来,我看到这里的时候也是很不理解,还是韩大师那句话,要多思考.它是怎么回事呢?它的思路应该是反过来的,我们联系联系具体的逻辑元器件,是不是有个非门的东西啊?你是1它变成0 ,0变成1,说白了就是按位取反啊,所以反码是从下层映射上来的东西,我们为什么要研究它,就是因为它的物理太容易实现了,我们不得不研究它的性质,研究它与我们的补码的关系. 结果,果不起然,关系密切着呢,是什么啊,反码加1就变补码了.

这就是三大编码了,原码,反码,补码.  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值