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

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

作者: 未来的同行者 | 来源:发表于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一种,自然这种编码方式是最优解了。

相关文章

  • 进制关系

    各进制的形式 正数的原码、反码、补码相同 负数的反码为原码各位取反,补码为反码+1 计算机的底层都是以补码的方式来...

  • 补码

    计算机中用补码来表示负数。以Java语言为例,int类型为32位4字节。 怎么求补码? 正数的补码为其本身;负数的...

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

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

  • Python位运算

    计算机中有原码,反码,补码的概念。计算机只能储存数字数据,而且是数字的补码,运算时也通过补码,因为计算机中只有加法...

  • 位运算

    1.原码、反码、 补码正数的原码、反码、 补码都一样 正数以原码存储在计算机负数 以补码存储在计算机 例...

  • 原码 反码 补码

    为了将符号位参与运算,并且只保留加法,从而简化计算机运算,发明了原码、反码、补码 在计算机系统中,数值一律用补码来...

  • 计算机中二进制补码的运算原理

    在计算机中负数以补码形式表示,计算负数补码的方法是符号位不变,其余位按位取反再加1。简言之,补码是计算机中用来表示...

  • 从补码谈计算机的数值存储和展示

    上下文约束 默认围绕8位计算机展开讨论。 问题 在进入正文之前,先提三个问题: 计算机中的数为什么用补码(2's ...

  • 源码、反码和补码

    先来个总结:1、计算机所有的存储,传输,计算,都是通过补码来的。所以,原码和反码,只存在cpu对输入进行转换到补码...

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

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

网友评论

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

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