有符號數表示法(原碼、補碼、反碼、移碼)


最近在看哈工大劉宏偉老師的《計算機組成原理》,總結其中關於有符號數的幾種表示法,順便感謝老師這麼好的公開課。

首先先明確兩個概念:

  • 真值:帶符號的數,如+101,-101
  • 機器數:符號數字化的數,如0101,1101

下面結束有符號數的四種表示法

1. 原碼錶示法

定義:

  • 對於整數
    [x]={0,x2n>x02nx0x>2n [x]_{原}=\begin{cases} 0, x & 2^n>x\geq0\\ 2^n-x & 0\geq x>-2^n \end{cases}
    其中xx爲真值,nn爲整數的位數。
    例子:
    x=+1110[x]=0,1110x=+1110\quad [x]_{原}=0,1110
    x=1110[x]=24+1110=1,1110x=-1110\quad [x]_{原}=2^4+1110=1,1110
    這裏逗號用於分割符號位和數值部分,實際計算機存儲中不存在,下同。
  • 對於小數
    [x]={x1>x01x0x>1 [x]_{原}=\begin{cases} x & 1>x\geq0\\ 1-x & 0\geq x>-1 \end{cases}
    例子:
    x=+0.1101x=0.1101x=+0.1101 \quad {x}_{原}=0.1101
    x=0.1101x=1+0.1101=1.1101x=-0.1101 \quad {x}_{原}=1+0.1101=1.1101
    這裏用小數點將符號位和數值位分隔開,下同

Note: [+0][0][+0]_{原}\neq[-0]_{原}
優點: 簡單、直觀。
缺點: 沒有統一加減法(對於兩個數相加,如果用源碼錶示法,可能需要做加法可能需要做減法,對運算器而言比較麻煩。)

2. 補碼錶示法

優點: 統一加減法
定義:

  • 對於整數
    [x]={0,x2n>x02n+1+x0>x2n(mod 2n+1) [x]_{補}=\begin{cases} 0, x & 2^n>x\geq0\\ 2^{n+1}+x & 0> x\geq-2^n(mod\,2^{n+1}) \end{cases}
    其中xx爲真值,nn爲整數的位數。
    例子:
    x=+1010[x]=0,1010x=+1010\quad [x]_{補}=0,1010
    x=1011000[x]=27+1+(1011000)=1,0101000x=-1011000\quad [x]_{補}=2^{7+1}+(-1011000)=1,0101000
  • 對於小數
    [x]={x1>x02+x0>x1(mod 2) [x]_{補}=\begin{cases} x & 1>x\geq0\\ 2+x & 0> x\geq-1(mod\,2) \end{cases}
    例子:
    x=+0.1110   [x]=0.1110x=+0.1110\quad\quad\, \,\, [x]_{補}=0.1110
    x=0.1100000[x]=2+(0.1100000)=1.0100000x=-0.1100000\quad [x]_{補}=2+(-0.1100000)=1.0100000
    Note[+0][0][+0]_{補}\neq[-0]_{補}

求補碼的快捷方式:
當真值爲正時,補碼與原碼相同;當真值爲負時,補碼可用原碼除符號位外,按位取反,末位再加1得到。
通過補碼求原碼:
當真值爲正時,原碼與補碼相同;當真值爲負時,原碼可用補碼除符號位外,按位取反,末位再加1得到。

3. 反碼錶示法

定義:

  • 對於整數
    [x]={0,x2n>x02n+11+x0x>2n(mod 2n+11) [x]_{反}=\begin{cases} 0, x & 2^n>x\geq0\\ 2^{n+1}-1+x & 0\geq x>-2^n(mod\,2^{n+1}-1) \end{cases}
    其中xx爲真值,nn爲整數的位數。
    例子:
    x=+1101[x]=0,1101x=+1101\quad [x]_{反}=0,1101
    x=1101[x]=24+11+(1101)=1,0010x=-1101\quad [x]_{反}=2^{4+1}-1+(-1101)=1,0010
  • 對於小數
    [x]={x1>x022n+x0>x1(mod 22n) [x]_{反}=\begin{cases} x & 1>x\geq0\\ 2-2^{-n}+x & 0> x\geq-1(mod\,2-2^{-n}) \end{cases}
    其中xx爲真值,nn爲小數的位數。
    例子:
    x=+0.1101[x]=0.1101x=+0.1101\quad [x]_{反}=0.1101
    x=0.1010[x]=224+(0.1010)=1.0101x=-0.1010\quad [x]_{補}=2-2^{-4}+(-0.1010)=1.0101
    Note: [+0][0][+0]_{反}\neq[-0]_{反}

三種機器數小結

  • 最高位爲符號位,書寫上用“,”(整數)或“.”(小數)將數值部分和符號位隔開。
  • 對於正數,原碼=補碼=反碼
  • 對於負數,符號位爲1,其數值部分將原碼數值部分按位取反末位加1—>補碼;原碼數值部分按位取反—>反碼。

4. 移碼錶示法

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