补码的一些理解

xnxn-1......x0  ,  xn为符号位

[x]补 = x           x>=0

[x]补= 2n+1+x   x<=0

  由于正数的原码,反码,补码都一样,所以没啥可讨论的,主要就是负数。负数的补码等于原码除了符号位的'1'之外其他位按位取反后加1,还有一种求法就是从原码的最右一位开始逐渐向左找到第一个为1得位k,把第k为之前的位取反就是补码。

对于 [  [x]补 ]补 = [x]原 的证明,

假设一个数 a(a<0) 可以表示为 an=1(符号位) an-1an-2......a0 , a的反码表示为  :  bn=1(符号位) bn-1bn-2......b0  (bi=~ai ,0<=i<n)  , a的补码表示为  cn=1cn-1......c0 ,

令 A=SUM{ 2i*ai   0<=i<n} ,  B=SUM{ 2i*bi   0<=i<n}  , C=SUM{ 2i*ci   0<=i<n} 

不难看出C=B+1=2n-1-A+1=2n-A , 即 A+C=2n ,设D是c的补码对应的除符号位的数值,那么我们有  C+D=2n, -->  A==D ,所以原码的补码的补码还是原码。

对于特殊数据,假设有8位,那么1000 0000,不满足上述推导式子 A+C==2n ,但是他的补码就是他自己,所以也满足 [  [x]补 ]补 = [x]原。

 

 通过这个图也可以看出来 原码值+补码值的和是一定的(对于负数来说),所有的数都满足这个规律。

猜你喜欢

转载自www.cnblogs.com/zzqc/p/9757326.html