2010-04-27 34 views
3

二進制值是2s補碼形式。二進制加法。它溢出了嗎?

如果我要添加110001(-15)和101110(-18),並且答案必須存儲在一個6位整數中,這是下溢/溢出。

+3

這是一個功課題嗎? – Amber 2010-04-27 23:39:37

+0

是的。但我解決了它,得到了十進制的答案-33。由於6位二進制補碼整數的下限是-32,根據我的說法,這是一個下溢,但根據我的教授。解決方案筆記,其不是。我只想確認一下。 – xbonez 2010-04-27 23:41:56

回答

2

這是溢出,你的教授是正確的。您正在存儲更多可以保留在分配空間中的位(即使這些位表示的數字是負數)。

下溢是當位通過大數學移位而變爲零時。在定點數學中很常見。將一個非常小的數字除以非常大的數字,並且您經常會得到0.這是下溢。

+0

+1這就是我要說的。下溢是一個不同的概念,更常見於浮點數學。 – 2010-04-27 23:48:25

0

編輯:我剛剛意識到-33是6位過大,所以結果不是-33而是+31,因此它絕對是一個溢出 :)

兩數相加並獲得正確的結果,如果絕對不是溢出。溢出的一個例子是添加兩個負數,並得到一個正數(反之亦然)。

例如,如果添加兩個正數0x7fffffff和0x00000001,則會得到負數0x80000000,這肯定是錯誤的,因此會發生溢出。

也許你會把溢出與攜帶混淆?

1

有一個很好的例子討論了添加兩個寄存器的內容-70和-90並將它存儲在第三個寄存器中。

Let's assume R1[8 bits] = -70 R2[8 bits] = -90 Result[9 bits] = -160, an extra bit for overflow.

這個例子下面參考1 overflow_signed_detection頁討論。 通過本頁討論的規則,該示例可以縮放爲任意兩個帶符號的十進制數字。