您的位置:首页 > 其它

原码,反码,补码,移码转换技巧

2013-09-11 09:33 369 查看
现在是准备软考的阶段,今天专业课上老师讲到了原码,反码,补码和移码,听得有点乱正好这些东东在软考的时候也会涉及的到,所以这两方面的原因我不得不来好好总结一下这四位大码。



一.先说为什么会有原码,反码,补码,移码

答:

在计算机里面,为了满足四则运算的要求,规定了原码、反码、补码,

为了数值之间大小的相互比较及一些格式数据记录的方便,而规定了移码.





二.分别用公式给大家介绍原码,反码,补码,移码(注:n表示机器字长)

1、原码的定义



2、补码的定义




3、反码的定义



4.移码:移码只用于表示浮点数的阶码,所以只用于整数。



(1)移码的定义:设由1位符号位和n位数值位组成的阶码,则 [X]移=2n + X -2n≤X ≤ 2n

例如: X=+1011 [X]移=11011 符号位“1”表示正号

X=-1011 [X]移=00101 符号位“0”表示负号



(2)移码与补码的关系: [X]移与[X]补的关系是符号位互为反码,

例如: X=+1011 [X]移=11011 [X]补=01011

X=-1011 [X]移=00101 [X]补=10101



怎么样?这些数学式子把大家弄迷惑没?其实这几位大码没这么难搞,没关系的,总结一下就好记了





三.下面我从正数和负数两方面对比说明他们之间的转换技巧:

正数(定点小数、定点整数):

原码,补码,反码相同;

移码只要在原码的最高位+1就可以啦,若数值最高位有进位则丢弃(不向符号位进位)



负数(定点小数、定点整数):

反码:保持原码符号位不变,数值位取反

补码:第一种方法给反码的最低位+1就可以啦,若数值最高位有进位则丢弃(不向符号位进位)

第二种方法以原码为基础,符号位不变,其他从最低位开始,直到遇到第一个1之前什么都不变,遇到第一个1保留
这个1,其他位按位取反。(个人认为这种方法比较好用)
移码:与补码的符号相反,数值位保持不变就可以啦


例如,当编码总位数为8时有:
+127的原码、反码、补码都为:0 1111111。
-127的原码、反码、补码依次为:1 1111111、1 0000000、1 0000001。
+0、-0的原码分别为:0 0000000、1 0000000,均对应真值0。

由于“编码总位数为8”的限制,真值-128无法用原码、反码来表示,似乎不能用上述规则来求解补码,但实际上是可行的——只要不管它的最高位即可,操作办法如下:
将128化为二进制为:10000000,最高位为1,可以只对舍去最高位后剩余的7位进行处理即可,首先取反得:1111111,加1得:1 0000000,最高位有进位需丢弃,即得:0000000,加上符号位就得补码:1 0000000。

又如,当编码总位数为4时,真值X=+0.101的原码、反码、补码均为:0101。
真值X=-0.101的原码、反码、补码依次为:1101、1 010、1 011。
注:在定点小数中,小数点隐含在第一位编码和第二位编码之间。

使用这样的方法进行这四码的转换,相对于套公式,个人认为轻松的多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: