为什么计算机以补码形式存储

 

  大家都直到,在计算机中主要是以补码的形式存储,那么为什么二进制数在原码、反码、补码中选择以补码的形式存储呢?

一、为什么不以原码形式存储?

  首先,原码是站在用户角度的,是原始的二进制!

求原码:

    1.用户的数字分为正负数,需要有一位存储符号

    2.最高位为符号位:0为正,1为负

    3.左边是高位,右边是低位

由原码的计算方式可以发现源码存储会引发2个问题:

  1. 0有两个存储方式

         我们以char型(占1字节,8位)为例(下同):

                            +0:    0000 0000

                             -0:    1000 0000

          不难发现+0和-0的原码是不一样的,而在计算过程中,+0和-0是没有任何区别的。

    2. 正数和负数相加,结果不正确(计算机只会加)

         1 - 1 =1 + (-1)

          1:  0000 0001

        -1:  1000 0001

                 1000 0010  =  -2

       很显然1-1=0,而用原码进行计算得出的结果却相差甚远!

二、为什么不以反码形式存储?

 既然原码不适合作为计算机的存储方式,人们在解决这个问题的过程中又提出了反码的概念

求反码:

  1. 求原码
  2. 符号为不变,其他位取反

注意:正数原码、反码一样!

  • 接下来我们检验一下1 - 1:

        1:    0000 0001

     -  1:   1111 1110

                 1111 1111 ->1000 000(转换为原码,因为原码是站在用户角度的) = -0

       不难可能出反码已经解决的正负数相加结果不正确的问题

  •    然后我们再检验+0、-0

              +0  0000 0000

               -0  1111 1111

        由此看出,反码并没有解决0有两种形式的问题

码存储会引发1个问题:

  1. 0有两个存储方式

三、补码存储

  在反码的基础上,人们有提出了补码的概念

求补码:

  1.    补码为其反码+1

注意:正数的原码、反码、补码都一样!

 

接下来我们对补码存储进行验证:

 

    +0: 0000 0000

     -0: 原码:  1000 0000

             反码:  1111 1111

             补码:1 0000 0000(char占1字节八位,最高位丢弃)= 0000 0000

 可以看出补码解决了+0 -0不一样的问题

 

    +1: 0000 0001

     -1: 1111 1111 

          1 0000 0000(最高位丢弃)=0000 0000 = 0

 那么补码也解决了正负数相加结果不正确的问题! 

 

总结:

     补码是在原码的基础上为了适应计算机运算一步一步完善而来,原码和反码存储都有一定的弊端,因此计算机采用补码存储!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值