原码、反码、补码

时间:2022-12-18 20:47:11

基本概念 
  在计算机内部表示二进制数的方法称为数值编码,把一个数及其符号在机器中的表示加以数值化,称为机器数。机器数所代表的数称为数的真值。  表示一个机器数,应考虑以下三个因素: 
  1.机器数的范围
  字长为8位,无符号整数的最大值是(11111111)B=(255)D,此时机器数的范围是0~255。
  字长为16位,无符号整数的最大值是
  (1111111111111111)B=(FFFF)H=(65535)D      此时机器数的范围是0~65535。
  2.机器数的符号
  在算术运算中,数据是有正有负的,将这类数据称为带符号数。
  为了在计算机中正确地表示带符号数,通常规定每个字长的最高位为符号位,并用0表示正数,用1表示负数。
  3.机器数中小数点的位置
  在机器中,小数点的位置通常有两种约定:
  一种规定小数点的位置固定不变,这时的机器数称为“定点数”。
  另一种规定小数点的位置可以浮动,这时的机器数称为“浮点数”。  
  4.原码
  正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。
  【例1】当机器字长为8位二进制数时:
            X=+1011011                   [X]原码=01011011
            Y=+1011011                 [Y]原码=11011011
            [+1]原码=00000001              [-1]原码=10000001
            [+127]原码=01111111            [-127]原码=11111111
  原码表示的整数范围是:
  -(2n-1-1)~+(2n-1-1),其中n为机器字长。
  则:8位二进制原码表示的整数范围是-127~+127
              16位二进制原码表示的整数范围是-32767~+32767
  5.反码        
  对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。【例2.14】当机器字长为8位二进制数时:
  X=+1011011  [X]原码=01011011   [X]反码=01011011
  Y=-1011011  [Y]原码=11011011   [Y]反码=10100100
   [+1]反码=00000001    [-1]反码=11111110
   [+127]反码=01111111    [-127]反码=10000000
  负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。         反码表示的整数范围与原码相同。
  6.补码
  正数的补码与其原码相同,负数的补码为其反码在最低位加1。

  【例2】(1)X=+1011011  (2) Y=-1011011
  (1)根据定义有:  [X]原码=01011011        [X]补码=01011011
  (2) 根据定义有: [Y]原码=11011011        [Y]反码=10100100  
  [Y]补码=10100101
  补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
  则:8位二进制补码表示的整数范围是-128~+127
        16位二进制补码表示的整数范围是-32768~+32767
  当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
  7.补码与真值之间的转换
  正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可得到该负数补码对应的真值的绝对值。

  【例3】[X]补码=01011001B,[X]补码=11011001B,分别求其真值X。
  (1)[X]补码代表的数是正数,其真值:
                                              X=+1011001B
                                                 =+(1×26+1×24+1×23+1×20)
                                                =+(64+16+8+1)
                                                =+(89)D
  (2)[X]补码代表的数是负数,则真值:
                                              X=-([1011001]求反+1)B
                                                =-(0100110+1)B
                                                =-(0100111)B
                                                =-(1×25+1×22+1×21+1×20)
                                                =-(32+4+2+1)
                                                =-(39)D