2012-03-01 55 views
10

我正在参加计算机组织和汇编语言课程。本周我们实验室的书面部分有一个问题让我难住。这个问题读取...从较小的一个中减去一个大的无符号二进制数

减去以下无符号二进制数(显示借位和溢出位)。不要转换为二进制补码。

0101 0111 1101 
-1110 1011 0110 
-------------- 

我知道答案是-1001 0011 1001,但我有一个困难时期试图采取更大的数量,并从减去弄清楚如何借用实际执行这个减法更小的数字,并显示我的工作。我的整个生活当从一个小数中减去一个大数时,我已经改变了这个问题,而是从较大的数中减去了较小的数,并在结果前加上了一个负号。我问教授,他说他希望问题能够解决问题。我不能通过从较大的数字中减去较小的数字来解决这个问题,并像我通常那样否定。我在网上找不到任何从较小的一个中减去较大的无符号二进制数的例子。

我真的很感激,如果有人可以向我描述如何在这种情况下执行减法。

更新: @Alex是正确的。教授正在寻找

0110 1100 0111 (1735) 

谢谢大家。

+2

你确定他不想让'0110 1100 0111'指示一些借位和一个溢出位吗? – Beta 2012-03-01 22:42:11

+0

@贝塔:不,答案是'-1001 0011 1001'(-2361)。他只是使用普通的二进制数字,而不是像2'-complement那样的特定计算机表示。 – 2012-03-02 17:36:43

+0

我不确定教授是否在-1001 0011 1001(-2361)或0110 1100 0111(1735)之后,我最终以1735结束。我认为@Beta是对的。当实验室交还给他时,我会回复他正在寻找的内容。 – 2012-03-02 17:51:35

回答

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的补充工作 – 2012-03-02 17:37:43

+0

谢谢亚历克斯。我怀疑你的榜首是教授之后的事情。这是我在试图解决问题时不断获得的。我认为这可能是问题的关键......表明在这种情况下,减法不会产生正确的结果。我认为我只是从错误的观念出发解决问题。 – 2012-03-02 17:46:31

+0

@ BlueRaja-DannyPflughoeft:他说:“不要转换为补码。”我没有转换任何东西。 – 2012-03-02 18:16:02

-1

只需简单地减去两个二进制数字,然后取2的补码结果。瞧!

相关问题