assembly 用补码代替两个二进制数的直接相减

eimct9ow  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(164)

最近我决定开始学习一些逻辑设计。我正在学习我正在使用的书的第一个单元(* 逻辑设计基础-第五版 *,如果它很重要的话),它给了我一系列的问题要回答。在实际问题之前,它给了我以下内容:B = A +(-B).将一个数字的补码与一个常规数字相加,而不是实际上直接减去这些数字。
我遇到了一个问题,它要求我减去10110(22)同× × 01101 × ×(13)加入10110(22)与01101的1的补数(10010)。您会假设答案为1001(9),对吧?我就是这么做的,得到了01001,但是我正在使用的这本书的解决方案部分指出存在溢出,我甚至在线查看了解决方案部分的另一个版本,但它仍然被声明为溢出。我只是想知道为什么书上说这会导致溢出,但输出的二进制表示仍然是正确的。
解自书解章节

我对整个逻辑设计的东西还是个新手。1和2的补码确实让我有点挂不住了。帮助将不胜感激。

bf1o4zei

bf1o4zei1#

我只想知道为什么书上说这会导致溢出...
我可以想象两件事:
1.本书希望你记住,当使用一的补码时,如果有一个从最高位开始的进位,你必须给结果加一
10110 + 10010 =(1)01000 = 01000 + 1
1.结果不正确:
如果你真的用5位数(而不是6位数)计算,10110不是22,而是(-9)!
对于值22,至少需要6位。
(So问题中的值已经是错误的!)
但是,(-9)-13是(-22),而不是9!
由于值(-22)至少需要6位,因此如果使用5位进行计算,则无法得到正确的结果。

b4lqfgs4

b4lqfgs42#

我相信这本书只是想说明,在使用这种减法时,你必须忽略溢出,01001是正确的答案,而不是101001
你不确定“溢出”是什么意思吗?你能试着重述一下你的实际问题吗?

相关问题