2015-10-05 26 views
1

使用6-bit二進制補碼算術,在任何這些情況下是否發生溢出?我相信有問題b,但沒有溢出。在這些情況中是否發生溢出?

(a) 11001 + 01000 
(b) 10111 – 00110 
(c) 00111 + 01100 
(d) 10110 + 00011 

我之所以說b是隨身攜帶的一個例子,而不是溢出,因爲結果是所添加的兩個數字的符號相同,即使是有進位。

+0

你的意思是5位或6位算術?因爲你在問題中說'6位',但是你的例子是5位使它們全部爲正數 – GabrielOshiro

+0

我的意思是6.當你想增加二進制補碼的位長時,你將符號位移到最左邊的位置並填寫帶有符號位的副本。對於正數,填寫零,對於負數填寫。這稱爲符號擴展。標誌不會改變。 – FutureSci

+0

如果您從xxx11x的任意數字中減去00110時發現了一個進位位,則可能是錯誤的。 –

回答

1

另外,結果可能會比使用的字長大小爲 的可以保存的結果大。這種情況叫做溢出

在我們的例子中,我們使用的是6位算術,所以我們可以將-32(100000)以上的數字表示爲+ 31(011111)。

如果在二進制補碼中加上兩個數字,一個是正數,另一個是負數,則永遠不會有溢出。結果將是操作數範圍內的一個數字。

所以要根據你的書,我們有溢出規則,頁314

。如果添加了兩個數字,它們都爲正或負,則發生溢出當且僅當結果有相反的跡象。

讓我們看到所有的項目:頁面上

(a) carry-out but no overflow 

    111001 -7 
+ 001000 +8 
    ------ -- 
1000001 +1 
(b) carry-out but no overflow 

    110111  -9 
+ 111000  -6 
    ------ --- 
1101111 -17 

在這裏,我們不得不先用減法規則,315

要減去一個數(減數)與另一個(被減數)相減,取減數的二進制補碼(否定)並將其加到被減數中。

(c) no carry-out, no overflow 

    000111  +7 
+ 001100 +12 
    ------ --- 
    010011 +19 
(d) no carry-out, no overflow 

    110110 -10 
+ 000011  +3 
    ------ --- 
    111001  -7 

需要注意的是,在(a)(b),有進位超越了字,其中被忽略的結束。

+0

這正是我的想法。問題必須有錯誤。我想我們應該使用五位而不是六位 – FutureSci

相關問題