水下功夫做透,水上才能顺风顺水。

原码、反码和补码

序言

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

原码反码补码三者一一对应,在各自属性内具有唯一性。

一. 原码

什么是原码?

原码(true form)是一种计算机中对数字的二进制定点表示方法,是有符号数的最简单的编码方式。

原码表示法在数值前面增加了一位符号位(即最高位为符号位):

正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

原码的优点:简单直观

例如我们用8位二进制表示一个数,+11的原码为0000 1011,-11的原码就是1000 1011

原码的缺点:不能直接参加运算,可能会出错

例如数学上,1+(-1)=0,而在二进制中 0000 0001 + 1000 0001 = 1000 0010
换算成十进制为-2,显然出错了。
由于原码的符号位不能直接参与运算,必须和其他位分开,如果用原码进行计算就增加了硬件的开销和复杂性
二. 反码(源码与补码之间的过渡码)
什么是反码?
在计算机内,定点数有3种表示法:原码、反码和补码。
反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机都不采用反码表示数。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
 数0的反码也有两种形式,即
[+0]反=00000000B
[- 0]反=11111111B
三. 补码
在计算机系统(包括内存)中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
补码的正零与负零表示方法相同。
[+0]补 = [-0]补 = 0000 0000B
(1) 已知原码,求补码。
  由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
(2) 已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1有方法。
 
总结:
正数:原码 = 反码 = 补码
负数:原码取反加1得补码。
   补码取反加1得原码。
   负数补码与原码相互转换,其运算过程是相同的。
   说明:取反时符号位不变。
 
posted @ 2015-03-25 15:12  北方寒士  阅读(457)  评论(0编辑  收藏  举报