原码、反码、补码

在计算机内,定点数有3种表示法:原码、反码和补码

所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

 

正数的反码和补码都是和原码相同。 

负数的反码是将其原码除符号位之外的各位求反 
[-3]反=[10000011]反=11111100 
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 
[-3]补=[10000011]补=11111101 
一个数和它的补码是可逆的。

 

有原码就可以了,为什么还需要反码和补码?

 

反码是用来算补码的,原码和补码都是用在CPU的基本运算里的,比如数据类型是short:   
  计算5   -   2,并由于实际上CPU没有实现减法电路(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法,原码没有办法做减法,而在我们使用的汇编、C等其他高级语言中使用的都是原码,原码转换成补码都是在计算机的最底层进行的)。原码计算是   5+(-2)

     0101

  +1010

  -------  

      1111 


  =-7?显然出错
 所以不管正数还是负数,都使用补码来表示(正数原码和补码是一样的),  2的补码是1110,然后用5补   +   2补   
      0101   
  +  1110   
  ------   
      0011   

  =3,正确
所以理论上(也仅仅是理论上)我们只要让减数通过一个求反电路,再通过一个+1电路,然后通过加法电路就可以实现减法了。  

所以补码的设计目的是: 
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则. 
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

 

 

原码和反码在表示数的时候的不唯一性,比如表示零的时候,原码就有两种表示法:

     [-0]原=10000000

     [+0]原=00000000

反码也有两种表示法:

     [+0]反=00000000

     [- 0]反=11111111

而补码则只有一种[-0]补=00000000。


转自http://blog.csdn.net/macky0668/article/details/3917878

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值