一,正数的最高位是符号位0,负数的最高位是符号位1。   

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

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

  正数:反码=补码=原码。

  负数:反码=除符号位以外的各位取反。

     补码=反码+1.   原码==补码-1后的反码==补码的反码+1  


二,数据在内存中都是以补码形式存在的,

  把时针倒拨20分钟,和正拨40分钟,效果是相同的。
  -20,就对应了 +40。
  怎么算的?用 60 减去 -20 的绝对值,即可。


  另外,100 以内的数字,减去1,和加上 99,效果也是相同的。
  比如,27 - 1 = 26,  27 + 99 = (1) 26。
  即 -1,就对应了 +99。
  怎么算的?用 100 减去 -1 的绝对值,即可。


  这些,就体现了“模”与“补数”的概念。
  利用补数,就可把减法,转换成加法。如果是正数,直接做加法就行,不用费事。
  对于负数,要用“模”减去这个负数的绝对值,求出“补数”之后再用于计算。
  对于正数,就不用变了。


  八位二进制数字的“模”是 1 0000 0000,即 256。
  -5 的补数就是:256 - 5 = 251。把 5、251,都写成二进制数,这就称为了“码”,此时就可以看出它们有求反加一的关系。
  即把 5 = 0000 0101,求反加一,就有:1111 1011,这就是 -5 的补码,这也就是 251。

 

总结

  补码的设计目的就是:   

  1.使符号位能与有效值部分一起参加运算,从而简化运算规则.   

  2.减运算转换为加运算,进一步简化计算机中运算器的线路设计.

 

posted on 2014-04-17 22:04  agtk  阅读(457)  评论(0)    收藏  举报