之前學習補碼的時候倒是學會了基本概念,但是最近又接觸時發現還有不清楚的地方,所以又研究了下
今天的核心問題的「cpu是如何區分高位自然捨棄和溢位的?」
先給出結論:如果運算中,數值位最高位(也就是有符號數的正數第二位)和符號位(也就是正數第一位)同時進製,則是自然捨棄。兩者間如果只有乙個進製,則是溢位。
下面來講解一下。運算的所有情況可以劃分為四種:
符號位進製,數值最高位不進製
符號位不進製,數值最高位進製
符號位和數值最高位都進製
符號位和數值最高位都不進製
對於第四種情況,就沒什麼好說了,都不進製的話根本涉及不到區分的問題。
對於第一種和第二種情況都好理解:對於第一種情況,既然數值最高位沒有進,那麼符號位的進製就一定是完全由符號位導致的,也就是說符號位一定是兩個1,那麼這樣進製的結果就是符號位為0——兩個負數加法運算結果為正數,當然是溢位了。第二種也是同理,數值最高位進製了而符號位沒有進,只能說明原來符號位是兩個0,那麼就是兩個正數相加結果為負數,溢位無疑了。
比較複雜一點的是情況3,它又可以細分為:
兩個數符號位都是1
乙個數符號位為1,另乙個是0
要講清楚這裡的內容,我們要了解一下究竟什麼是溢位?我們以4位二進位制數為例,它的表示範圍是[-8,7]。注意,溢位是結果錯誤,但不是二進位制加法本身有錯誤,我們所說的溢位,是指在對二進位制加法的結果進行擷取後,擷取的結果和算術運算的結果不符,而造成溢位的原因就是計算的結果超出能表示的範圍。而對於情況2,乙個正確表示的正數和乙個正確表示的負數相加,結果一定是不會超出表示範圍的,這裡的進製就只能是自然進製。對於1,兩個負數相加什麼情況下才會溢位呢?就是超出表示範圍的情況,而對於負數,除了符號位之外,數值位0越多數就越小。在1的前提下,能找到的最小的負數就是1010和1110,其分別是-6和-2,加起來正好是-8不超範圍。所以這種情況也被證明了不會溢位了。
綜上,我們證明了只有在符號位和數值最高位兩個裡面只有乙個進製的時候才是溢位,依次為據我們就可以設計cpu指令了。
如何區分廣告排名和自然排名?
如何區分廣告排名和自然排名?在www.alibaba.com 1 顯示 top sponsored listing 字樣 2 產品間以粗實線分隔 3 產品間以虛線分隔 4 細實線且有顯示 sponsored listing 字樣 5 產品間以細實線分隔 1 顯示 top sponsored list...
cpu如何區分指令和資料
計算機載入的第一條肯定是指令,然後根據這條指令去取二進位制數,如果這條指令要取運算元,那麼取出來的就是運算元 如果這條指令要取下一條指令,那麼取出來得就是指令。把指令和資料分開放是為了安全和邏輯結構清晰。隨便指令和資料存放的格式一樣,但是訪問他們的時機不同 在取指令時期,cpu通過指令流取指令,存放...
Linux下區分物理CPU 邏輯CPU和CPU核數
概念 物理cpu 實際server中插槽上的cpu個數 物理cpu數量,可以數不重複的 physical id 有幾個 邏輯cpu linux使用者對 proc cpuinfo 這個檔案肯定不陌生.它是用來儲存cpu硬體資訊的 資訊內容分別列出了processor 0 n 的規格。這裡需要注意,如果...