• 您的网站试用资格已过期。

【信息奥赛】原码反码补码

来源:ZJ作者:ZJ

一、数的原码、补码和反码

1.机器数与真值

在计算机中,表示数值的数字符号只有01两个数码,我们规定最高位为符号位,并用0表示正数符号,用1表示负数符号。这样,机器中的数值和符号全“数码化”了。为了简化机器中数据的运算操作,人们采用了原码、补码、反码及移码等几种方法对数值位和符号位统一进行编码。为区别起见,我们将在机器中的这些编码表示成为机器数(如10000001)。而将原来一般书写表示的数称为机器数的真值(如-0000001)。

2.原码表示法

原码表示法是一种简单的机器数表示法,即符号位和数值表示法。设x为真值,则[x]原为机器数表示。

    例:设X=1100110   [x]=01100110[正数]

        X=-1100111,    [x]=11100110[负数]

3.反码表示法

正数的反码就是其真值本身,负数的反码,只需对符号位以外各位按位“求反”(0110)即可。

    例:设X=1100110   [x]=01100110[正数]

           X=-1100111, [x]=10011000[负数]

4.补码表示法

负数用补码表示时,可以把减法转化为加法。正数的补码就是其本身,负数的补码是符号位为1,数值各位取反(0变成11变成0),最低位加1

    例:设X=1100110,则[x]=01100110[正数]

        X=-1100111,   [x]=10011001[负数]

结论

真值

原码

反码

补码

正数

0+本身

0+本身

0+本身

负数

1+本身

1+各位取反

1+各位取反后最低位+1

注意:   

真值0的原码和反码表示不唯一,而补码的表示是唯一的,而补码表示是唯一的,即:

[+0]=00000, [-0]=10000

[+0]=00000, [-0]=11111

[+0] = [-0]=0000

5.编码及其表示范围

不同的编码表示的整数范围是这样的(已N位二进制位)

原码:0~2n-1(无符号)-2n-1 -1 ~ 2n-1-1(有符号)

反码:-2n-1 -1 ~ 2n-1-1(不存在无符号情况)

补码:-2n-1   ~ 2n-1 -1(不存在无符号)

补码表示的范围最大。现在以8位二进制为例说明如下:

原码:00000000 ~11111111   即:0~255(无符号)

    1111111~01111111    -127~+127(有符号)

反码:10000000 01111111

    -127~+127 (因为1000000 值为-12711111111 的值为-0

补码:1000000~01111111

    -128 ~ +127 (因为1000000的值-1281111111的值为-1)。

如果没有具体说明编码形式,则计算机中N位二进制无符号数的范围是0~2n-1-1;有符号数的范围-2n-1   ~ 2n-1 -1

8位有符号整数为例子:

原码:X为正数,则最高位(符号位)为0,其余按照二进制数排列;

X为负数,则最高位为1,后面和正数原码一样。

:   +7:00000111, -7 : 10000111

        +0:00000000, -0 : 10000000

反码:X为正数,则反码与原码相同

X为负数,则将原码除符号位取反。

: -7 : 11111000

补码:反码+1

: -7 : 11111001