美文网首页
计算机为什么用补码来计算

计算机为什么用补码来计算

作者: 未来的同行者 | 来源:发表于2017-12-29 15:51 被阅读0次

    计算机中数字都是用二进制来表示的,有三种编码方式:原码、反码、补码,而计算中用到最多的就是补码,原因是什么呢?让我们来看一下这三种方式的具体表示吧

    原码

    原码的表达很简单,最高位为符号位,0表示正数,1表示负数。其它位即为绝对值的二进制表示,非常直观。但是使用原码存在哪些问题呢?

    1. 0的表示存在二义性
      如果按照上述的表示方式,那么0就可以分为+0和-0两种表示。即以8位字长来说 +0的原码为00000000,-0的原码为10000000,这两种表示都对应0,这样在计算机判断0时就会带来一些麻烦。
    2. 进行运算时符号需单独处理
      例如要计算一个 8 + (-5),就要先计算最后的结果的符号,那么需要比较两个数的绝对值,在根据两个数的符号来确定。

    反码

    反码只是原码与补码的一个中间结果,它并没有什么实际用途。负数的反码为在原码的基础上,除符号位均取反。例如-8的原码为10001000,而反码则为111101111

    补码

    补码是有反码+1得到的,那么这个补码有什么神奇的地方呢?我们先要考虑一个概念:取模运算。一般来说,取模称之为mod,在java中 用%号来表示。例如 5 %2 = 1。

    现在有一个问题,一周中星期四的前三天是星期几?我们可以把一周7天用1-7来表示,那么星期四的前三天可以表示为 4 -3 = 1 ,那么星期四之后四天还是星期一,那么我们可以表示成 4+4 = 1,为什么有4+4 = 1,因为4+4 = 8,大于7之后又是一个新的循环,所以实际上应该写成 (4+4)%7 = 1,所以可以看到-3和4 是补数。

    所以可以看出,补码可以简化加减法运算,而符号位也可以直接参与运算,不必单独计算符号位。而至于0的表示则只有00000000一种,自然这种编码方式是最优解了。

    相关文章

      网友评论

          本文标题:计算机为什么用补码来计算

          本文链接:https://www.haomeiwen.com/subject/ygwigxtx.html