第7节原码、反码和补码

原码、反码和补码表示

原码、反码、补码是计算机存储一个具体数字的编码方式。数值在计算机中是以补码的方式存储的。

数的定点表示和浮点表示

一、机器数和真值

在学习原码、反码和补码之前,需要先了解机器数和真值的概念。

  1. 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。 比如,十进制中的数+3,计算机字长为8位,转换成二进制就是00000011,如果是-3,就是10000011。那么,这里的00000011和10000011就是机器数。
  2. 真值 机器数的第一位是符号位,后边才是真正的数值,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:

0000000100000001的真值=+0000001=+1,

1000000110000001的真值=-0000001=-1。

二、数的原码、反码和补码表示

  1. 原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制: [+1][+1]原=00000001,

[1][-1]原=10000001。

第一位是符号位。因为第一位是符号位,所以8位二进制数的取值范围就是:

11111111,0111111111111111,01111111127,127-127,127

  1. 反码 反码的表示方法为正数的反码是其本身。负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1]=[00000001][+1]=[00000001]原=0000000100000001

[1]=[10000001][-1]=[10000001]原=1111111011111110

  1. 补码 补码的表示方法为正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1(即在反码的基础上+1)。 [+1]=[00000001][+1]=[00000001]原=0000000100000001反=0000000100000001补, [1]=[10000001][-1]=[10000001]原=1111111011111110反=1111111111111111补。

三、数的定点表示和浮点表示

在计算机中小数点一般有两种表示法:一种是小数点固定在某一位置的定点表示法;另一种是小数点的位置可任意移动的浮点表示法。相应于这两种表示的计算机分别称为定点计算机和浮点计算机。

  1. 定点表示法 机器中所有数的小数点位置是固定不变的,因而小数点就不必使用记号表示出来。实际上,小数点可固定在任意一个位置上。
  2. 浮点表示法 在数的定点表示法中,由于数的表示范围较窄常常不能满足各种数值问题的需要。为了扩大数的表示范围,方便用户使用,有些计算机常采用浮点表示法。表示一个浮点数,要用两部分:尾数和阶码。尾数用以表示数的有效数值;阶码用以表示小数点在该数中的位置。 计算机多数情况下采用浮点数表示数值,它与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分:

N=2E×SN=2^{E}×S

其中E是N的阶码(Exponent),是有符号的整数。S是N的尾数(Mantiss),是数值的有效数字部分,一般规定取二进制定点纯小数形式。

例:1011101B=2+70.1011101, 101.1101B=2+30.1011101, 0.01011101B=20.01011101B=2x0.1011101