【計算機組成原理】補碼加減法和溢出檢測


補碼加法

補碼加法運算基本公式

定點整數: [x+y]=[x]+[y]( mod 2n+1)[x+y]_補 = [x]_補+[y]_補 \quad (結果\ mod\ 2^{n+1})

定點小數: [x+y]=[x]+[y]( mod 2)[x+y]_補 = [x]_補+[y]_補 \quad (結果\ mod\ 2)

例1: x=+1001,y=+0101,x+yx= +1001, y=+0101, 求x+y

 [x]=0 1001,[y]=0 0101\because \ [x]_補 = 0\ 1001,\quad [y]_補=0\ 0101
在這裏插入圖片描述
x+y=+1110\therefore x+y = +1110

例2: x=+1011,y=0101,x+yx=+1011, y=-0101, 求x+y

[x]=0 1011,[y]=1 1011\because [x]_補=0\ 1011, [y]_補 = 1\ 1011
在這裏插入圖片描述
結果對2n+12^{n+1}取模

x+y=+0110\therefore x+y = +0110

計算機中加法是同過補碼進行的, 這是爲了在同一個運算器上另一種運算——減法. 兩個數的補碼相加等於兩個分別求補碼再相加, 最終結果對2n+12^{n+1}取模.


補碼減法

補碼減法基本運算公式

定點整數: [xy]=[x][y]=[x]+[y][x-y]_補 = [x]_補-[y]_補=[x]_補+[-y]_補

定點小數同上.

運算過程的重點是把[y][y]-[y]_補 \Rightarrow [-y]_補

轉換規則: 符號位和數值位均取反, 最後加1.

爲什麼符號位取反? 因爲這個過程是把一個負數轉換成一個正數, 所以符號位需要變.

爲什麼數值位取反? 取反後加1這個過程是對補碼又求了一次補碼, 最終數值位變成了原碼, 又因爲符號位取反, 所以這個數從負數變成了正數, 因此在這裏又可以得出: 多次求補碼, 可以使 原碼 \overset{互轉}{\rightleftharpoons} 補碼.

例: 一個負數[001][1001][1111][10001][-001] \Rightarrow [1001]_原 \Rightarrow [1111]_補 \overset{再求補碼}{\Longrightarrow} [10001]_補 , 此時的補碼變成了原碼.


溢出概念及其檢測方法

當所存儲的數超過二進制(固定長度)所能表示的值的範圍時, 二進制所表示的數值出現錯誤, 這種現象稱爲溢出. 溢出並非都是壞處, 在將減法轉換成加法(由補碼完成)就利用了溢出的特性.

溢出分兩種正溢出和負溢出, 當兩個正數相加超出進製表示範圍稱爲正溢出, 兩個負數進行運算超出進製表示範圍稱爲負溢出.

溢出只出現在良正數或負數相加.

溢出檢測方法有兩種: 變形補碼判別法單符號位法

變形補碼採用雙符號位表示補碼, 任何正數的符號位都是"00", 任何負數的符號位都是"11", 運算後, 如果符號位變成"01"(正溢)或"10"(負溢)表示出現溢出.

符號位 結果
00 正數
01 溢出
10 溢出
11 負數

在電路中使用異或判斷很方便.
單符號位法判斷時採用1bit進位與符號位進行判斷, 判斷方式通上.

Q&A 請指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章