为什么补码可以表示负数

[转载] 为什么补码可以表示负数?

计算机中加减的运算都通过加来求值,减去一个数等于加上这个数的负值,这是可以理解的。

负数的表示是在最高位置1来区分,这还不够,严格的说是通过对其正数的补码来表达负值,所谓补码就是 反码+1。其实这才是负数的最高位为1的理由!

来到了主题,负数为什么可以用 "反码 + 1" 来表达?

和其它真理一样,这也是先人宝贵发现之一,它可以简化计算机硬件的加减运算,只要加加就可以了,而不像人工计算那样,还需要用到借位思想。

要证明这个定理,可分如下几步:

1) 这种方法的表达值 与 正值相加 等于 0; (负数的定义)

2) 与较大的正值相加,结果会让该正值抵消掉其负值大小,而变小; (减法的特性之一)

3) 与较小的正值,与负值相加, 结果... ; (减法的其它特性)

我发现1)和 2)是可以证明的,3)应该也没问题。下面是补码作为负数的表达,可以让  1) 和 2) 通过的理解和描述。

1)正数+负数 = 正数 + 正数反码 + 1 ==  0;

      因为反码就是取反,任何数与其反码相加,其结果将是 :"...11111", 再加上1, 那就如骨牌一样,全部依次拍倒,成为 "...00000"

      也就是说,这样可以表示负数,那可以用作减法吗?

2) 之所以有这个疑惑,是因为有个错觉,比如负1,那最高几位都是1,那么加上一个数,最高位不还是1吗?

       其实如果把数打出来,就会发现情况,比如 5 + (-2),两个数的二进制数是这样:

        11111110

        0000101

        加一下,就会发现5的最高有效位(第3位)以上都会被抵消,即第3位到第8位之间都将变成0。这解释了上面的疑惑。
        同时5和-2相加后,其值将肯定小于其本身,因为最高权值相加后,会变成0,就算下面低位相加有进位来替补,那么下面一位也将是从原来的1变成0,所以正值是肯定变小了。

        上面是感性的认识,只是从感觉上的判断。逻辑上的证明可以这样:

             正数 A , 负数B, 绝对值A的要大;

             那么 A + B =  a + |B| + B = a;  (a为A与B的绝对值之差)

             而 |B| + B == 0, 是 在1)中证明的,所以上式成立。

3) 严谨的角度来讲,这步也需要证明。但这里只是想从感性上对负数的补码表示有个认识,就省去了。

综上:负数在计算机中,就是能让正数变零的值,而补码(反码+1)满足其需求。负数的最高位为1,只是这一表达式的结果而已,而不是预先设定。        
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值