美文网首页C/C++编程
原码、反码、补码

原码、反码、补码

作者: Sivin | 来源:发表于2016-09-05 14:39 被阅读75次

原码、反码、补码

标签(空格分隔): C语言


一个数在计算机中式以二进制的形式存在。通常我们称为机器数机器数是有符号的,在计算机中最高位存放符号位。其中正数的符号位为0,负数的符号位为1

原码:符号位加上其余位的真值的绝对值

这里以字长位 8 位的机器为例

例如:3的原码就是 0000 0011 
     -3的原码就是 1000 0011

反码:对于正数而言,反码就是原码,对于负数而言,反码是除号位之外,其余各位取反

例如:3的反码是:0000 0011
     -3的反码是:1111 1100

由于计算机在用原码参与计算时需要考虑到符号位,效率比较低下,因此在计算机中,负数通常是以补码的形式存放在内存中的。
补码:对于正数而言,原码,反码,补码,是一致的,对于负数而言,补码等于反码加一

例如:3的补码是:0000 0011
    -3的补码是:1111 1101

计算 3-3

0000 0011  + 1111 0100 = 0000 0000 =0

计算 5-7

0000 0101 + 1111 1001 = 1111 1110------> -2的补码

思考:不知道大家想过这个问题没有?为什么对于字长为8位的数值类型存储范围为什么是 -128到127呢?

答:在计算机中的数值是以补码的形式存放的,因为使用原码和反码存放时会出现一个1000 0000 我们叫负零,我们认为负零这个数多余的,我们想让0的表示是唯一的。而补码正好解决了这个问题,当-127的补码和-1的补码相加时得到的补码正好是在原码表示下的负零,于是我们将这个数值成为-128扩充了一位。这样解决了,计算的效率问题,也解决了零编码的唯一性问题,还增加了数值存储的范围。

补码如何转成原码

符号位不动,其他位求反,最后整个数加一,得到原码

-2的补码是:1111 1110
原码是:1000 0010;

相关文章

  • 软件测评师做题技巧

    第一类补码,反码,原码 正数:原码=反码;补码=原码负数:反码=原码求反;补码=反码+1 第二类用例概率的计算 测...

  • 原码、反码、补码和移码

    书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...

  • 2018-10-22 Python31 原码、反码、补码

    原码、反码、补码 1)如何计算补码?规则: 正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补...

  • 计算机为什么要使用原码、反码、补码

    1. 什么是原码、反码、补码 先看一个例子: +1和-1的原码、反码、补码的表示 原码、反码、补码的计算方式如下:...

  • 补码

    原码、反码、补码 原码:符号位 反码:减法变加法 补码:+1解决-0问题 数学原理 同余 反码:mod127 补码...

  • 【计算机】我的收藏文章索引

    索引表 索引标题链接摘要原码、反码、补码《原码、反码、补码,详解》http://www.cnblogs.com/z...

  • [计基]-二进制之补码

    一.基础名词 原码 : 0011 反码 :0011(原码) >> 1100(反码) (原码按位取反) 补码 :00...

  • 技术问 - 原码、反码、补码

    什么是原码、反码、补码:

  • 位运算

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

  • 原码、反码和补码

    正数的原码、反码和补码相同,亦是正数 负数的原码、反码和补码符号位为1,代表负数,反码在原码的基础上符号位不变,其...

网友评论

    本文标题: 原码、反码、补码

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