鱼C论坛

 找回密码
 立即注册
查看: 2015|回复: 4

[技术交流] 什么是补码 新手想了很久才略微明白了

[复制链接]
发表于 2013-3-29 18:45:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[code][b]补码
  计算机只能进行加法,但是往往还需要减法运算,如何让计算机加法加出减法的功效呢?于是有人天才般的引入补码,解决了这个问题。
  
  当我们想把25,-2这两个数存入内存单元中时,内存单元显示的是怎样的数据呢?
  他应该是11001,因为是8位1字节,所以是00011001。同理-2应该是 -00000010 。
  问题就出在这个负号上。计算机里只有0和1.他不会有负号,那么负号怎么办?
  把符合去掉?那00000010就是2 ,显然不对。把数据变成其他的二进制?那我们可以把变掉的二进制放入计算器里面转换一下,肯定是个正数,哪里来的负数呢?
  
  这个时候,有人就想到了,用正数来代替负数。不过这很奇怪,从数学的角度讲,减去一个数等于加上一个数?这不可能吧。
  但是就有这样的情况。不知道大家还记得物理学上的波长吗?其中有个周期T。移动T或者T的倍数,结果是一样的。减去T或者T的倍数,结果也是一样。我们只要规定一个周期T,不能行了?
  
  时钟就是这个原理。他是1~12个点构成。周期T = 12 。现在时钟不准了,时间是2点,实际上是3点,那么该怎样调整呢?
  
  这里有两种方法,第一是顺时针转一圈,第二是逆时针转11圈。这用数学表示就是:
  2 + 1 = 3     2 - 11 = 3 = 2 -12 +1
  
  这样就有眉目了。用加法加出减法的效果。比如:
  25  - 2 = 23
  25 + 98 = (1)23
  只要能把 (1)去掉,那么 25 -2 就等于 25 +98 .我们只要设置T = 100就行了。
  
  时钟就是12为周期,本质上讲,他存在一个“丢弃”行为来实现周期。那就是12 加1 ,他会把12这个周期给丢弃。结果就变成了1.
  
  创立补码的人就想,二进制我们也设置一个周期,来一个“丢弃”体制,不就行了吗?
  比如说8位,如果溢出变9位了,那就把第9位去掉。那么他的周期是多少呢?
  这里的T = 256 (不用多解释了吧)
  
  现在剩下的事情,就是把 -2 转换成一个等效的正数,存在内存单元里,前面说过, T = 256 那么究竟等效的正数是多少呢?  我们把这个等效的正数称为补码
  
  求这个等效的正数的公式:(求补码公式)
  -2  的绝对值 2,变成8位的二进制,然后把最高位的0改写成1.(到这里数据称为原码)   
  -2的原码10000010 再保留最高位,让后7位全部取反,取反就是0变1,1变0.那么结果就是11111101.这个结果称为 -2 的反码。 然后反码+1 就变成补码。-2的补码是 11111110 。
  
  根据补码的效果,我们来看看是不是这样:
  25 (00011001) + 11111110  = 100010111  = 00010111 (第9位自动舍弃)
  计算器算一下,是不是23?  加上一个负数,等于加上这个负数的补码。
  
  
  那么为何会这么神奇呢?下面进行具体的数学推导过程:
  设 A ,C .设周期为T ,令 A-C 
    
  - C 的原码是 C的最高位变1 。对于8位来说,256是周期 T ,那么最高位变1 意味着什么?
  意味着 - C变成了  C +  T/2 (能明白这步吧?)
  
  原码变反码意味着:  C + T/2 变成了 T / 2  + (T /2   -    C   -   1)
  反码变补码就是反码加1 ,最后补码就是 T - C
  
  好了 也就是说 - C的补码是 T - C
  所以公式  A - C = A + (-C的补码) = A + T - C
  
   
  那么正数的补码是什么呢?人们规定:正数的原码,补码,反码都不变,因为不需要变嘛!
  
  计算机中的数值都是以补码形式储存的。正数不变,负数变。[/b]
[/code]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-29 23:48:06 | 显示全部楼层
我觉得楼主上面写的不错呀。在理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-30 18:51:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-6 20:13:50 | 显示全部楼层
感谢楼主分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-6 20:25:36 | 显示全部楼层
真是难得给力的帖子啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表