计算机中的原码、补码与反码

一、原码:

  所谓原码就是当前数字的二进制表现形式,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示

  +7的原码为: 00000111
   -7的原码为: 10000111

  对于原码来说,绝对值相等的正数和负数只有符号位不同。

二、反码:

  正数的反码就是本身。负数的反码是二进制保留符号位。剩余位取反,比如-1的反码是1111 1110;

三、补码:

  正数的反码、补码、原码都是一样的,负数的补码是在其反码的基础上+1,比如-1的补码是1111 1111。

为什么要使用补码呢:

  我们知道,0是不分正数还是负数的,也就是说,如果使用原码表示0的话,有两种表示方式,即00000000与10000000,这对计算来说很不方便。

如果我们使用补码来表示的话:

  正数的0的表示:

    因为正数的原码、反码、补码都是相同的。所以正数0的反码与补码都是00000000;

  负数的0的表示:

    负数的0的原码是10000000,它的补码也就是在其反码的基础上+1,10000000的反码为符号位不变,剩余位取反,即为11111111,再加一的话为00000000,这样的话0的正数表示与负数表示都是00000000。

  其实还有一个更重要的原因:就是利用高位溢出,将减法运算变成加法运算。这样可以简化运算的设计:

比如计算3-2,我们可以当做3+(-2)来运算:

化为二进制:

  3:0000 0011;

  -2:原码:1000 0010;反码:1111 1101;补码在反码基础上+1,即为:1111 1110

这样3+(-2)的计算为:1000 0010

         +  1111 1110

        --------------------

 高位溢出结果为:0000 0001

在计算机系统中,数值都是以补码来表示和存储的。计算机计算过程是 先转换成补码,再按位相加。

原文地址:https://www.cnblogs.com/qingo00o/p/8982813.html