學習筆記——原碼、反碼、補碼

1、原碼錶示法spa

原碼錶示法是一種最簡單的機器數表示法,其最高位爲符號位,符號位爲「0」時表示該數爲正,符號位爲「1」時表示該數爲負,數值部分與真值相同。
若真值爲純小數,它的原碼形式爲Xs,.X1X2X3...Xn,其中Xs表示符號位。原碼定義爲:

圖片描述

example-1: 
            若:X = 0.0110
            則:[X]原 = X = 0.0110 
            
            若:X = -0.0110
            則:[X]原 = 1 - X 
                      = 1 - (-0.0110) 
                      = 1 + 0.0110 
                      = 1.0110
若真值爲純整數,它的原碼形式爲XsX1X2X3...Xn,其中Xs表示符號位。原碼的定義爲:

圖片描述

example-2:
            若:X = 1101
            則:[X]原 = X = 01101
            
            若:X = -1101
            則:[X]原 = 2^n - X 
                      = 2^4 - (-1101) 
                      = 10000 + 1101 
                      = 11101
在原碼錶示中,真值0有兩種不一樣的表示形式:
[+0]原 = 00000 
[-0]原 = 10000
原碼錶示方法的優勢是直觀易懂,機器數和真值間的相互轉換很容易,用原碼實現乘、除運算的規則很簡單;缺點是實現加、減運算的規則較複雜。

2、補碼錶示法code

1.模和同餘

爲了理解補碼錶示法,首先須要引入模和同餘的概念。圖片

模(Module)是指一個計量器的容量,可用M表示。例如:一個4位的二進制計數器,當計數器從0計到15以後,再加1,計數值又變回0.這個計數器的容量M = 2^4 = 16,即模爲16.因而可知,純小數的模爲2,一個字長爲n + 1位的純整數的模爲2^(n+1)。 同餘概念是指兩個整數A和B除以同一個正整數M,所得餘數相同,則A和B對M同餘,即A和B在以M爲模時是相等的,可讀做: A = B(mod M)。對鐘錶而言,其模M = 12,故4點和16點、5點和17點、...均是同餘的,它們能夠寫做:4 = 16(mod 12),5 =17(mod 12) 利用模和同餘概念的補碼錶示法在進行算數運算時可使減法運算轉化爲加法運算,從而簡化機器的運算器電路。get

假設:時鐘停在8點,而如今正確的時間是6點,這時撥準時鐘的方法有兩種:
(1)將分針倒着旋轉兩圈(即時鐘倒撥兩個小時),8 - 2 = 6(作減法)
(2)將分針正着旋轉10圈(即時鐘正撥10小時),8 + 10 = 6(mod 12)(作加法) 此時,8 - 2 = 8 + 10(mod 12) it

設: A = -2, B = 10 則:10/12 = (12 - 2)/12 = 1 + -2/12
故:-2和10同餘。同餘的兩個數,具備互補關係,-2餘10對模12互補,也能夠說-2的補數是10(以12爲模)。io

可見,只要肯定了「模」,就可找到一個與負數等價的正數(該正數即爲負數的補數)來代替此負數,而這個正數能夠用模加上負數自己求得,這樣就可把減法運算用加法實現了。class

example-3: 
            9 - 5 = 9 + (-5) 
                  = 9 + (12 - 5) 
                  = 9 + 7 
                  = 4(mod 12)

example-4:
            65 - 25 = 65 + (-25) 
                    = 65 + (100 -25) 
                    = 65 + 75 
                    = 40(mod 100)
將補數的概念用到計算機中,便出現了補碼這種機器數。

圖片描述

2.補碼錶示

補碼的符號位表示方法與原碼相同,其數值部分的表示與數的正負有關;對於正數,數值部分與真值形式相同;對於負數,將真值的數值部分按位取反,且在最低位上加1.
若真值爲純小數,它的補碼形式爲Xs,.X1X1...Xn,其中Xs表示符號位。補碼的定義爲:原理

圖片描述

example-5: 
            若:X = 0.0110
            則:[X]補 = X = 0.0110
            
            若:X = -0.0110
            則:[X]補 = 2 + X 
                      = 2 + (-0.0110) 
                      = 10 - 0.0110 
                      = 1.1010
若真值爲純整數,它的補碼形式爲XsX1X2...Xn,其中Xs表示符號位。補碼定義爲:

圖片描述

example-6:
            若:X = 1101;    
            則:[X]補 = X = 01101;

            若:X = -1101;
            則:[X]補 = 2^(n+1) + X 
                      = 2^5 + (-1101) 
                      = 100000 - 1101 
                      = 10011
在補碼錶示中,真值0的即是形式是惟一的:
[+0]補 = [-0]補 = 0000
3.由真值、原碼轉換爲補碼

採用補碼系統的計算機須要將真值或原碼形式表示的數據轉爲補碼形式,以便於運算器對其進行運算。一般,從原碼形式入手來求補碼。
當X爲正數時,[X]補 = [X]原 = X。 當X爲負數時,其[X]補等於把[X]原除去符號位外的各位求反後再加「1」。
反之,當X爲負數時,已知[X]補,也可經過對其除符號位外的各位求反加「1」求得[X]原二進制

當X爲負數時,由[X]原轉換爲[X]補得另外一種更有效的方法是:自低位向高位,尾數的第一個「1」及其右部的「0」保持不變,左邊的各位取反,符號位保持不變。方法

example-7:
            若:[X]原 = 1.1110011000
            則:[X]補 = 1.000110***1000***(符號位和斜體部分不變,其餘位取反)
這種方法避免了加1運算,是實際求補線路邏輯實現的依據。
也能夠直接由真值X轉換爲[X]補,其方法更簡單:數值位自低位向高位,尾數的第一個「1」及其右部的「0」保持不變,左部的各位取反,負號用「1」表示。
example-8: 
            若:X = -0.1010001010
            則:[X]補 = 1.0101110110

3、反碼錶示法

反碼錶示法與補碼錶示法有不少相似之處,對於整數,數值部分與真值形式相同;對於負數,將真值的數值按位取反。它與補碼的區別是末位少加一個「1」,所以很容易從補碼的定義推出反碼的定義。
若真值爲純小數,它的反碼形式爲Xs,.X1X2...Xn,其中Xs表示符號位。反碼的定義爲:

圖片描述

example-9:
            若:X = 0.0110
            則:[X]反 = 0.0110
            
            若:X = -0.0110
            則:[X]反 = (2 - 2^-n) + X 
                      = (2 - 2^-4) + (-0.0110) 
                      = 1.1111 + (-0.0110) 
                      = 1.1111 - 0.0110 
                      = 1.1001
若真值爲純整數,它的反碼形式爲XsX1X2...Xn,其中Xs表示符號位。反碼的定義爲:

圖片描述

example-10:
            若:X = 1101
            則:[X]反 = 01101
            
            若:X = -1101
            則:[X]反 = (2^(n+1) - 1) + X 
                      = (2^5 - 1) + (-1101) 
                      = 11111 - 1101 
                      = 10010
在反碼錶示中,真值0也有兩種不一樣的表示形式:
[+0]反 = 00000 
[-0]反 = 11111

4、三種碼制的比較

三種碼制既有共同點,又有各自不一樣的性質,主要區別有如下幾點:
(1)對於正數它們都等於真值自己,而對於負數各有不一樣的表示
(2)最高位都是表示符號位,補碼和反碼的符號位可做爲數值位的一部分看待,和數值位一塊兒參加運算;但原碼的符號位不容許和數值位同等看待,必須分開進行處理
(3)對於真值0,原碼和反碼各有兩種不一樣的表示形式,而反碼只有惟一的一種表示形式
(4)原碼、反碼錶示的正、負數範圍相對於零來講是對稱的;但補碼負數表示範圍較正數範圍寬,能多表示一個最負的數(絕對值最大的負數),其值等於-2^n(純整數)或-1(純小數)

參考:計算機組成原理Structured Computer OrganizationComputer Organization and Design-The Hardware/Software Interface

相關文章
相關標籤/搜索