我正在选修计算机组织和汇编语言课程。本周我们实验室的书面部分有一个问题让我很困惑。问题是..。
减去以下无符号二进制数字(显示借方和溢出位)。不要转换为二人的补码。
0101 0111 1101
-1110 1011 0110
--------------我意识到答案是-1001 0011 1001,但我很难想出如何借到这个减法,从较小的数字中减去它,并展示我的作品。在我的一生中,当我从一个小的数字中减去一个大的数字时,我已经扭转了这个问题,而是从较大的数字中减去了较小的数字,并在结果的前面添加了一个负号。我问教授,他说他想用书写的方式解决这个问题。我不允许通过从较大的数字中减去较小的数字来解决这个问题,并像通常那样否定。我还没有在网上找到任何从更小的二进制数字中减去更大的无符号二进制数的例子。
如果有人能向我描述如何在这种情况下执行减法,我会非常感激的。
更新:@Alex是正确的。教授在找
0110 1100 0111 (1735)谢谢大家。
发布于 2012-03-02 01:33:58
不管哪个数字更大,哪个更小,你也是这样做的。
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并不关心从什么中减去什么。在整数加减法中采用了相同的算法,而且该算法对于有符号整数和无符号整数也是一样的。您只需正确解释结果和进位和溢出标志。就这样。
发布于 2017-01-12 22:47:19
简单地减去两个二进制数,然后取结果的2的补充。瞧!
https://stackoverflow.com/questions/9523210
复制相似问题