原码反码补码推导原理
被加数 被减数
加数 减数
———— ————
和 差
减法和加法在某些方面是互为补充的,这两种计算机制不同。
加法从最右边一列向最左边一列计算,每一列的进位都加到下一列中。
减法不用进位,相反,要用到借位---一种本质上与加法不同的机制。
124
- 77
———
47
从右边一列开始,首先7比4大,所以从2借1。这样子变成了14-7=7,
2被借了1,变成1,继续,1比7小,所以继续从1借1,11减7等于4。
1被借1后成为1,1减1变成0,最后的结果为47
一般不会使用逻辑门来实现减法器,乘法器,除法器,是利用数学规律在加法器的基础上进行拓展。
那减法是怎么样变成加法的。在《原码反码补码》那节课直接给大家演示了一下转换办法。
但那个转换办法是怎么样推导出来的呢?接下来给大家简单说说这个推导过程。
比如上面的减数是2位数:77,而两位数中最大的十进制数为:99,如果拿99-77,这样子就不存在需要借位了。
99
- 77
———
22
如果减数为三位数的话,就用3位数中最大的数字999去减,以此类推。
这样子就得到了一个77的补数。(补数和补码可不是一回事,别混淆)
77之9的补数是22,反之,22之9的补数是77。
这样做的好处在于,无论减数是多少,计算这个减数9的补数永远不需要借位。
计算出减数9的补数之后,把它加到原来的被减数上:
124
+ 22
————
146
再加一个1,并且减去100:
146
+ 1
- 100
_________
47
你也许有点懵了,发生了什么,怎么结果突然就蹦出来呢?
原始题目是:124-77
表达式加一个数再减同一个数得到的结果是一样的,所以先加上100,再减去100.
124-77+100 -100
等同于: 124-77 +99+1-100
再进行变换 124+ (99-77)+1-100
这与前面描述过的用9的补数进行的计算是一致的。
虽然用了两个减法和两个加法来代替一个减法,但是也因此省去了讨厌的借位。
那如果减数比被减数大怎么办呢?例如
77
- 124
————
???
减数比被减数大,只需要交换两数的位置,再把上面的过程重复一下,然后计算结果前面加一个负号就行了。
现在完整的回忆一下流程:
124 - 77
124 - 77 + 100 - 100
124 - 77 + 99 + 1 - 100
124 + (99 - 77) + 1 - 100
=124 + 23 -100
=47
0111 1100 - 0100 1101
0111 1100 - 0100 1101 + 1 0000 0000 - 1 0000 0000
0111 1100 - 0100 1101 + 1111 1111 +1 - 1 0000 0000
0111 1100 + (1111 1111 - 0100 1101) +1 - 1 0000 0000
0111 1100 + 1011 0011 - 1 0000 0000
= 1 0010 1111
= 0010 1111
本文介绍了如何通过补码原理将减法转化为加法的过程。通过使用补数避免了减法运算中的借位操作,简化了计算机内部的算术运算。文章详细解释了这一转换过程,并给出了具体的数字例子。
5266

被折叠的 条评论
为什么被折叠?



