我正在学习计算机组织和汇编语言课程。本周我们实验室的书面部分有一个问题让我难过。问题是......
减去以下无符号二进制数(显示借位和溢出位)。不要转换成两个补码。
0101 0111 1101
-1110 1011 0110
--------------
我意识到答案是 -1001 0011 1001 但是我很难通过获取更大的数字并从中减去它来弄清楚如何借用来实际执行此减法数量较少,并显示我的工作。我的整个生命从一个较小的数字中减去一个大数字我已经扭转了问题,而是从较大的数字中减去较小的数字,并在结果前面添加了一个负号。我问教授,他说他希望问题能够解决问题。我不允许通过从较大的数字中减去较小的数字来解决这个问题,并且像我通常那样否定。我无法在网上找到任何较小的无符号二进制数减去的例子。
如果有人可以向我描述如何在这种情况下进行减法,我真的很感激。
更新: @Alex是正确的。教授正在寻找
0110 1100 0111 (1735)
谢谢大家。
答案 0 :(得分:7)
无论哪个数字更大,哪个数字更小,您都可以这样做。
bb b bb <- borrows
0101 0111 1101 (1405)
-1110 1011 0110 (3766)
--------------
0110 1100 0111 (1735?)
现在,如果你想要一个适当的差异,你需要考虑溢出,因为上面的结果不包括符号位:
b bb b bb <- borrows
0 0101 0111 1101 (1405)
-0 1110 1011 0110 (3766)
----------------
1 0110 1100 0111 (-2361 signed 2's complement)
真的,CPU并不关心从什么中减去什么。它使用相同的算法进行整数加法/减法,此外,该算法对于有符号和无符号整数是相同的。您只需要正确解释结果以及进位和溢出标志。就是这样。
答案 1 :(得分:-1)
简单地按原样减去两个二进制数,然后取结果的2的补码。瞧!