2012-03-01 261 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的補碼結果。瞧!

相關問題