计算机数值数据编码(原码,反码,补码,移码)

 

机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位置表示数值。若是小数点的位置在机器数的最低位之后,则是纯整数;若是约定小数点的位置在机器数的最高位之前(符号位之后),则是纯小数。

 

下面是带符号的机器数的原码、反码、补码、移码的编码方法:

 

  1. .原码表示法:数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则原码的定义如下:

 

计算机数值数据编码(原码,反码,补码,移码)_第1张图片

 

例一:若机器字长n等于8,分别给出+1,-1,+127,-127,+45,-45,+0.5,-0.5的原码表示。

 

[+1]原=0 0000001 [-1]原=1 0000001

[+127]原=0 1111111      [-127]原=1 1111111

[+45]原=0 0101101 [-45]原=1 0101101

[+0.5]原=0 。1000000 [-0.5]原=1 。1000000

(“。”表示的是小数点的位置)

在原码表示法中,最高位是符号位,0表示符号为正,1表示为负,其余的n-1位表示数的绝对值。数值0的原码有两种形式:  [+0]原=0 0000000,

[-0]原=1 0000000。

 

(2).反码表示法。数值X的反码记作[X]反,如果机器字长为n,则反码定义如下:

计算机数值数据编码(原码,反码,补码,移码)_第2张图片

 

 

例二:若机器字长n等于8,分别给出+1,-1,+127,-127,+45,-45,+0.5,-0.5的反码表示。

 

[+1]反=0 0000001 [-1]反=1 1111110

[+127]反=0 1111111      [-127]反=1 0000000

[+45]反=0 0101101 [-45]反=1 1010010

[+0.5]反=0 。1000000 [-0.5]反=1 。0111111

(“。”表示的是小数点的位置)

在反码表示法中,最高位是符号位,0表示符号为正,1表示为负。其中正数的反码与其原码相同,负数的反码是其绝对值按位求反。数值0的反码有两种形式:  [+0]反=0 0000000,

[-0]反=1 1111111。

 

(3)补码表示法。数值X的补码记作[X]补,如果机器字长为n,则补码定义如下:

 

计算机数值数据编码(原码,反码,补码,移码)_第3张图片

例三:若机器字长n等于8,分别给出+1,-1,+127,-127,+45,-45,+0.5,-0.5的反码表示。

 

[+1]补=0 0000001 [-1]补=1 1111111

[+127]补=0 1111111      [-127]补=1 0000001

[+45]补=0 0101101 [-45]补=1 1010011

[+0.5]补=0 。1000000 [-0.5]补=1 。1000000

(“。”表示的是小数点的位置)

在补码表示法中,最高位是符号位,0表示符号为正,1表示为负。其中正数的补码与其原码相同,负数的反码则等于其反码的末尾加1。数值0的补码有唯一的编码:  [+0]补=0 0000000,[-0]补=0 0000000。

 

(4)移码表示法:移码表示法是在数X上增加一个偏移变量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为2^(n-1),则移码定义如下:

若X是纯整数,则[X]移=2^(n-1)+X(-2^(n-1)<=X<=2^(n-1));若X是纯小数,则[X]移=1+X(-1<=X<=1)。

[+1]移=1 0000001 [-1]移=0 1111111

[+127]移=1 1111111      [-127]移=0 0000001

[+45]移=1 0101101 [-45]移=0 1010011

[+0.5]移=1 。1000000 [-0.5]移=0 。1000000

[+0]移=1 0000000 [-0]移=1 0000000

 

实际上,在偏移2^(n-1)的情况下,只要将补码的符号位取反便可获得相应的移码表示。

 

总结:机器数的原码表示法可以看做以二进制表示,注意在负数的情况下需要将符号位置为1。而反码表示法在整数的情况下是和原码一样的,在负数的情况下,是将原码中除了符号位①以外的所有位置都变为相反的(1变成0,0变成1)。补码表示法在整数的情况下是和原码、反码一样的,而负数情况下是在最后一位加1(注意,是加1,而不是将最后一位变成1)。移码表示法是在补码的基础上无论正负,都把符号位变为相反的(1变成0,0变成1)。

 

注:①关于符号位的概念开头就讲过了。

你可能感兴趣的:(计算机数值数据编码(原码,反码,补码,移码))