原创 关于补码 减一个数等于加上这个数的补码 理解式证明

2016-6-18 15:43 8625 25 25 分类: MCU/ 嵌入式
1.补码的计算方式第一种是原码取反+1,第二种是模-原码,这是两种等效的方法,下面简单理解式的证明一下两种方法等效
以一个字节8位举例。假设原码为1001 0110,取反0110 1001,把原码补码得10001 0110 + 0110 1001 = 1111 1111,
也就是说,反码(1001 0110)=8位最大数(1111 1111)- 原码(1001 0110)。
根据第一中取补码的定义:
补码=反码+1
    =8位最大数(1111 1111)-原码(1001 0110)+ 1
    =8位最大数 [(1111 1111) + 1 ]- 原码(1001 0110)
    =1 0000 0000 - 原码(1001 0110)
1 0000 0000即是8位的模256,即第一种求补效果等于第二种求补效果
 
2. 二进制减法,利用减一个数等于加上这个数的补码原理,现在把这个原理简单理解式证明一下这个原理
首先,我们都是在8位之内计算,高于八位数不影像低8位,在低8位范围内可以认为
 0000 0000 = 1 0000 0000,
假设被减数(1101 0101),减数(1001 0110)及其补码[1 0000 0000 - 减数(1001 0110]
差 = 被减数(1101 0101)- 减数(1001 0110)
   = 被减数(1101 0101)- 减数(1001 0110)+ 1 0000 0000 ;
   = 被减数(1101 0101)+ [1 0000 0000 - 减数(1001 0110)]
   = 被减数(1101 0101)+ 补码(0110 1010)
 也就是减一个数等于加上一个数的补码
 
3.关于正负数之间的加减法,也是减去一个数等于加上这个数的补码,
  计算机并不认识正负,正负是人为的定义,相关资料网上颇多,不再赘述。
 
4. 计算两个数之差的一种物理意义,
   假设数组引用变量i,j是两位二进制数,取值范围00 01 10 11
   当i,j到11后,自动变为00(wrap方式),j - i = ? 
   j(11) - i(01) = 10  没有发生借位
   j(00) - i(01) = 11=-1, 发生借位
   规律:两数相减,不考虑正负,差表示j先与i多遍历了几个元素,
         并且最大差值是两个数位数能表示的最大值。
        这个负号,表示从i,j方向的反方向,从i到j需要遍历几个元素,
        11,不看成补码,形式则表示从i->j顺方向为3,也就是从小到大,再从最大返回最小方式
         11,看成补码,则表示从i->j的反向经历1个元素,即从大到小再返回大,11是-1的补码。
       

文章评论0条评论)

登录后参与讨论
我要评论
0
25
关闭 站长推荐上一条 /2 下一条