热度 25
2016-6-18 15:43
8631 次阅读|
0 个评论
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位最大数 - 原码(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)及其补码 差 = 被减数(1101 0101)- 减数(1001 0110) = 被减数(1101 0101)- 减数(1001 0110)+ 1 0000 0000 ; = 被减数(1101 0101)+ = 被减数(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的补码。