原码,补码,反码,移码

来源:互联网 发布:ubuntu wifi 热点 编辑:程序博客网 时间:2024/06/05 13:34

为什么有这些码

原码


定义机器字长为n,若数值X是纯整数

若数值X是纯小数,对纯小数的原码计算是先将其转换为二进制(必须的~)

例:若机器字长为8,则:

[+1]=0 0000001         [-1]=1 0000001     [+7]=0 0000111   [+127]=0 1111111

[-127]=1 1111111     [-7]=1 1111000     [+0.5]=0♢1000000   [-0.5]=1♢1000000

对于0来说,其原码有两种表示方式:[+0]=0 0000000,[-0]=1 00000000

反码

机器数的反码可由原码得到。若机器数为正数,则其反码与原码一样;如果机器数为负数,则其反码是对它的原码(除符号位外)各位取反而得到的。也可用公式表示,若X是纯整数,则:

若X是纯小数,则:

例:若机器字长为8,则:

[+1]反=0 0000001   [-1]反=1 1111110    [+7]反=0 0000111   [-7]反=1 1111000   [+127]反=0 1111111     [-127]反=1 0000000

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

对于0来说,反码也有两种表示方式:[+0]反=0 0000000   [-0]反=1 1111111

补码

机器数的补码可由原码得到。若机器数为正数,则其补码与原码一样;如果机器数为负数,则其补码是对它的原码(除符号位外)各位取反,再加1而得到的(也就是对其反码再加1)。也可用公式表示,若X是纯整数,则:

若X是纯小数,则:

例:若机器字长为8,则:

[+1]=0 0000001   [-1]=1 1111111    [+7]=0 0000111   [-7]=1 1111001   [+127]=0 1111111     [-127]=1 0000001

[+0.5]=0♢1000000   [-0.5]=1♢1000000

对于0来说,补码有唯一的表示方式:[+0]=0 0000000   [-0]=0 0000000

移码

机器数的移码是在数X上增加一个偏移量来定义的,它常用于表示浮点数中的阶码。移码和补码的关系是符号位互为反码。如果机器字长为n,规定该偏移量为2n-1,移码定义如下:

若X是纯整数,[X]=2n-1+X   (-2n-1≤X<2n-1)

若X是纯小数,[X]=1+X    (-1≤X<1)

例:若机器字长为8,则:

[+1]=1 0000001   [-1]=0 1111111    [+7]=1 0000111   [-7]=0 1111001   [+127]=1 1111111     [-127]=0 0000001

[+0.5]=1♢1000000   [-0.5]=0♢1000000

对于0来说,补码有唯一的表示方式:[+0]=1 0000000   [-0]=1 0000000

由于四种数据表示相互之间都存在一定的转换关系,因为推荐先求其原码,然后再根据该关系转换到该码制。

0 0
原创粉丝点击