对于补码一直只知道应用方法,就是正数的补码是其本身,负数的补码是其对应正数的每一位取反后加一,这样减法操作就可以用加法来实现。但是一直不太明了其原理,今天就来掰开揉碎了聊一下。
补码源自于数学上补数的概念和方法,所以理解补码必须先理解补数。
补数
补数(radix comletment)的定义:有一个以b为基数,位数为n的数字y,y的补数即是b的n次方减去y。例如,基数是10,三位数123的补数就是877(1000-123)。
缩减基数补数(diminished radix complement)的定义:b的n次方减1减y。例如,基数是10,123的缩减基数补数就是876(1000-1-123)。
为什么有个缩减基数补数呢,因为更方便计算。从数学上可以证明b的n次方减1减y可以这样得到,y的每一位数被b-1减去。例如上面的例子,9(10-1)-1,9-2,9-3可以分别得到y的缩减基数补数的百位,十位和个位。至于如和证明,可以自行google。
减法的加法能实现原理
用加法实现减法,可以有两种方法。
第一种,用x的缩减基数补数加上y得到x-y的缩减基数补数。
第二种,x加上y的补数可以得到x-y的值。
待续。。。
本人水平有限,但是欢迎指正交流。
如果你觉得有点意思,欢迎关注 悟空的小车库。
时间: 2024-12-25 18:24:58