計算機基礎之原碼反碼補碼

前言:學計算機的第一個接觸的知識就是原碼反碼補碼,不自覺得會認爲這個很簡單,但是現在讓你算一個數的原碼反碼補碼真的會嗎?讓你算兩個補碼之和會算嗎?今天看計算機組成原理,書中又提到了這些知識,就順便總結一下.

一 原反補碼互相轉換:
一個正整數,當用原碼,反碼,補碼錶示時,符號位都爲0,用二進制表示的數位都相同,即三種表示方法一樣.
一個負整數,當用原碼,反碼,補碼錶示時,符號位都固定爲1,原碼變爲反碼和補碼的規則如下:
(1)原碼符號位1不變,後面的每一位二進制數位求反得到反碼.
(2)反碼符號位爲1不變,反碼數值位最低位加1,得到補碼.
舉個栗子:
x=+122,y=-122,求[x]原,[x]反,[x]補,[y]原,[y]反,[y]補
先轉化爲二進制:[x]原=01111010,[x]反=01111010,[x]補=01111010(正整數三個一樣)
[y]原=11111010,[y]反=10000101,[y]補=10000110

二 補碼加法:
[x]補+[y]補 = [x+y]補(mod 2^(n+1))
舉個栗子:
1.兩個正整數相加
x=+1001,y=+0101,求x+y
[x]補=01001,[y]補=00101,[x+y]補=01110
所以x+y=+1110
2.一正一負相加:
x=+1001,y=-0101,求x+y
[x]補=01001,[y]補=10101,[x+y]補=(1)00110
因爲要在模2^(n+1)意義下相加,所以把進的1去掉即
[x+y]補=00110,x+y=+0110

補碼減法:(即加一個負數)
x=+1001,y=+0101,求x-y
[x]補=01001,[y]補=00101,[x-y]補=[x]補+[-y]補=(1)00111
同理把1捨去,得x-y=+0111

三 溢出概念
當我們算x=+1011,y=+1001,求x+y時
會得到先[x+y]補=10100,兩個正數相加得到負數,顯然不對,這種情況稱爲正溢
這個時候得解決方法是:
雙符號位法,即把[x]補寫爲001100,[y]補=001000,這樣得到得[x+y]補=010100
同理當兩個負數相加,也會有可能產生負溢,解決方法負數補碼前加11.

 

 

 

 

 

 

 

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