最近我决定开始学习一些逻辑设计。我正在学习我正在使用的书的第一个单元(* 逻辑设计基础-第五版 *,如果它很重要的话),它给了我一系列的问题要回答。在实际问题之前,它给了我以下内容:B = A +(-B).将一个数字的补码与一个常规数字相加,而不是实际上直接减去这些数字。
我遇到了一个问题,它要求我减去10110(22)同× × 01101 × ×(13)加入10110(22)与01101的1的补数(10010)。您会假设答案为1001(9),对吧?我就是这么做的,得到了01001,但是我正在使用的这本书的解决方案部分指出存在溢出,我甚至在线查看了解决方案部分的另一个版本,但它仍然被声明为溢出。我只是想知道为什么书上说这会导致溢出,但输出的二进制表示仍然是正确的。
解自书解章节
我对整个逻辑设计的东西还是个新手。1和2的补码确实让我有点挂不住了。帮助将不胜感激。
2条答案
按热度按时间bf1o4zei1#
我只想知道为什么书上说这会导致溢出...
我可以想象两件事:
1.本书希望你记住,当使用一的补码时,如果有一个从最高位开始的进位,你必须给结果加一:
10110 + 10010 =(1)01000 = 01000 + 1
1.结果不正确:
如果你真的用5位数(而不是6位数)计算,10110不是22,而是(-9)!
对于值22,至少需要6位。
(So问题中的值已经是错误的!)
但是,(-9)-13是(-22),而不是9!
由于值(-22)至少需要6位,因此如果使用5位进行计算,则无法得到正确的结果。
b4lqfgs42#
我相信这本书只是想说明,在使用这种减法时,你必须忽略溢出,
01001
是正确的答案,而不是101001
。你不确定“溢出”是什么意思吗?你能试着重述一下你的实际问题吗?