2013-12-17 66 views
2

我有一個來自Patterson的計算機組織書的問題。8位有符號整數加法範圍

這裏他們給出了兩個數字A和B,它們是8位有符號整數。 A和B的值分別是216和255。他們要求找到A + B和A - B並報告是否有上溢/下溢。

現在我的疑問是 - 你甚至不能在8位有符號數中表示216。範圍是[-128,127]。所以這個問題是無效的!

如果有人確認我的疑問,我會很感激。

謝謝。

+0

聽起來不錯。你確定這本書不說未簽名嗎? http://babbage.cs.qc.edu/courses/cs343/errata.php上有一個勘誤頁面,但未列出。這似乎是電腦教授會注意到的。 – Barmar

+0

感謝您的快速回復。書中的問題是「假設A和B是以二進制補碼格式存儲的帶符號8位十進制整數」。 – DataEnthusiastic

回答

0

這個問題根本無效。事實上,這種類型的問題很常見,以確保您理解溢出/下溢,只是在比特表示中環繞,就像當里程錶變得過高時里程錶翻轉爲全零時一樣。由於我也是計算機科學學院,所以我會盡力協助,而不要直接回答Patterson問題。

你是正確的本能地感覺216不能代表簽署的8位數字,但讓我們看看這些事情是如何工作的。

假設你有一個帶符號的4位機器,並且需要存儲數字-11。你可能很聰明,注意有符號4位數的範圍是[-8,7],所以-11必須是不可能的。不是那樣的......首先,存儲11 ...一般是0000 ... 0000001011_2,但我們必須將它壓縮到4位,除了低位4位之外都將丟失。所以11 = 1011_2。此時你可能會說,「但這不是一個負數?」那麼,如果你有任何馬匹,請暫時保持一分鐘。現在否定4位11得到4位-11 ... 2s壓縮否定需要翻轉所有位並加1,所以-1011_2 = 0100_2 + 1 = 0101_2。

好的,你現在可以停止你的馬匹了。它確實0101_2實際上是+5,但它可能也是一樣好,爲-11?當老師讓你檢查你的結果時,請記住你的早期數學日期......我們可以在這裏做同樣的事情,感受溫暖和舒適,約+5和-11一樣。例如-11 + 6 = -5,對嗎?所以如果我們加6到0101_2並得到-5,我們應該滿足於我們看似超出範圍的-11,是正確的嗎?當然! :-)讓我們來看看...... 6 = 0110_2的4位數,現在我們來添加。

0101 
+ 0110 
------ 
    1011 

那麼什麼是1011_2?這是消極的;我們可以看出,因爲符號位(最左邊的位)是1.要找到它的大小,我們可以否定它...... -1011_2 = 0100_2 + 1 = 0101_2,令我們驚訝的是5,所以原始結果1011_2是-5,這是人們應該預料到的答案。

也許我們不相信這是好的。讓我們通過添加14來驗證-11是0101_2。這應該給我們3的結果,因爲-11 + 14 = 3.呃哦... 14也似乎超出範圍,但是讓我們像機器一樣工作,然後執行我們被告知,無論它看起來多麼愚蠢。一般來說+14是0000 ... 0001110_2,但我們必須通過丟失所有的低位4位來將它壓縮成4位。所以有符號4位的+14是1110_2。讓我們把它加到-11 ...

0101 // -11 
+ 1110 // +14 
------ 
10011 ...but this also needs to get squeezed into 4 bits, so it's 0011 

嘿,是不是0011_2和+3一樣?它是!所以看起來你實際上可以存儲出現在明顯範圍之外的數字,並且至少在某些數學上它們仍然可以被精確地使用。

所以希望這給了你一個想法,你可以如何處理以有符號8位格式存儲255和216而不用擔心。但是我會將檢測到溢出/下溢給你:-P

祝你好運。