前文已经概述了负数用补码表示的由来,但只是证明了一个正数和其对应负数相加为零的特殊情况,对于更一般的加法的正确性,我们给出如下证明,我来为大家科普一下关于补码运算方法和技巧?以下内容希望对你有帮助!

补码运算方法和技巧(补码计算的完备性证明以及负128表示问题)

补码运算方法和技巧

前文已经概述了负数用补码表示的由来,但只是证明了一个正数和其对应负数相加为零的特殊情况,对于更一般的加法的正确性,我们给出如下证明。

第一种情况:正数A减去正数B(A-B)

此时A-B相当于A (-B)则用补码表示相当于 A 256-B,

1)当A>B时转换成256 A-B,256加一个数相当于后八位全零加,则不影响A-B的值,此时得到正确的A-B的正值。

2)当A<B时转换成256-(B-A),二此时256-(B-A)正好是B-A的补码表示,得到正确的负值补码。

第二种情况:负数A减去正数B(-|A|-B)

此时-|A|-B可转换为256-|A| 256-B

当|A|>B时 上式又可转化为 256-(|A| B) 在没有小于-127溢出的情况下又是正确的表示了结果负数补码的值。

其它情况大家可以参考自行证明。

最后看下特殊的情况:当我们计算-127-1时,补码相加后,由于最高位产生进位,后八位变成了10000000,这个值符合我们负数的表示定义,即可以用来表示-128,同时又符合256-128的计算结果,当然我们不会表示 128.一般情况下任何两数相加为-128时,我们都可以把其中的一个是拆成-|A| 1-1,相当于前例 -127-1的情况。这样我们用10000000来表示-128就是完备的了。

综上:

1) 负数的数字表达即为256减去其绝对值,也是我们人工计算的方法。计算-2的表示,我们用1 00000000减去00000010,我们手工计算的话,得到11111110,相当于把00000010按位取反再加上1,正数按位取反加上自身则8为全为1,再加上1则最高位进位后,8位全为0。

2)已知补码的值,我们人工计算只要用256减去这个值即可,计算机自己读数的话就是减一后再按位取反。

初学者还是需要多练习思考。

,