原码、反码、补码

 数值在计算机中是以补码的方式存储的;

    在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。

对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。

  一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。比如,十进制中的数 +2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是 -2 ,就是 [10000010] 。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [10000010],其最高位1代表负,其真正数值是 -2 而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。

  • 原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
  • 反码:反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
  • 补码:补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 
  • 一.原码
  • 1>.正数的原码就是它的本身

      假设使用一个字节存储整数,整数10的原码是:0000 1010

    2>.负数用最高位是1表示负数

      假设使用一个字节存储整数,整数-10的原码是:1000 1010

  • 二.反码

    1>.正数的反码跟原码一样

      假设使用一个字节存储整数,整数10的反码是:0000 1010

    2>.负数的反码是负数的原码按位取反(0变1,1变0),符号位不变

      假设使用一个字节存储整数,整数-10的反码是:1111 0101

  • 三.补码(再次强调,整数的补码才是在计算机中的存储形式。)

    1>.正数的补码和原码一样

      假设使用一个字节存储整数,整数10的补码是:0000 1010(第三次强调:这一串是10这个整数在计算机中存储形式)

    2>.负数的补码是负数的反码加1

      假设使用一个字节存储整数,整数-10的补码是:1111 0110(第三次强调:这一串是-10这个整数在计算机中存储形式)

原文地址:https://www.cnblogs.com/jinseliunian/p/9752488.html