反碼

反碼

反碼是數值存儲的一種,多套用於系統環境設定,如linux平台的目錄和檔案的默認許可權的設定umask,就是使用反碼原理。在計算機內,定點數有3種表示法:原碼、反碼和補碼。

基本介紹

  • 中文名:反碼
  • 外文名:Inverse code
  • 所屬領域計算機
  • 作用:存儲數值
  • 附加:多數計算機不採用反碼錶示數值
概述,原碼,反碼,補碼,移碼,詳細釋義,轉換,

概述

在計算機內,有符號數有3種表示法:原碼、反碼和補碼。幾種表示法關係密不可分。

原碼

原碼是計算機機器數中最簡單的一種形式,數值位就是真值的絕對值,符號位位“0”時表示正數,符號位為“1”時表示負數,原碼又稱帶符號的絕對值。為了方便整數和小數區別,整數的符號位與數值位之間用“,”隔開,小數的符號位與數值位之間用“.”隔開。
反碼
根據2個定義可以看出,原碼的整數和小數中“0”的表示形式各有2種,“+0”和“-0”不一樣,以8位機器數為例,整數的“+0”原碼為0,0000000;整數的“-0”原碼為1,0000000;小數的“+0”原碼為0.0000000,小數的“-0”原碼為1.0000000。滿足條件的數,帶入定義裡面計算機,主要機器數位,直接計算得到。

反碼

反碼通常是用來由原碼求補碼或者由補碼求原碼的過渡碼。整數的反碼定義如圖3整數反碼定義,小數的定義如圖4小數反碼定義。根據定義,可以得到機器數的反碼的整數和小數中“0”的表示形式各有2種,“+0”和“-0”不一樣,以8位機器數為例,整數的“+0”原碼為0,0000000;整數的“-0”原碼為1,1111111;小數的“+0”原碼為0.0000000,小數的“-0”原碼為1.1111111。反碼跟原碼是正數時,一樣;負數時,反碼就是原碼符號位除外,其他位按位取反。
反碼

補碼

補碼是計算機把減法運算轉化為加法運算的關鍵編碼,整數的補碼碼定義如圖5整數補碼定義,小數的定義如圖6小數補碼碼定義。
反碼
根據2個定義可以看出,補碼的整數和小數中“0”的表示形式各只有1種,“+0”和“-0”一樣,以8位機器數為例,整數的“+0”和“-0”補碼為0,0000000;小數的“+0”和“-0”補碼為0.0000000。因為根據定義x為“-0”,以8位機器數為例,為負數求補碼,根據公式得28+(-0),即100000000+(-0),機器數位8位,所以為00000000,跟“+0”得到的補碼一樣。1,0000000補碼,表示的數位-128。補碼有下面2個性質,根據這2個性質可以把減法轉化為加法來著,性質如圖7、圖8。
反碼

移碼

計算機中如何判斷一個數是否為“機器零”有兩條件,分別為當浮點數尾數為0時,不論其階碼為何值按機器零處理;另外,當浮點數階碼等於或小於它所表示的最小數時,不論尾數為何值,按機器零處理。階碼都是整數,為了機器好判斷設定了移碼。移碼的定義如圖9。
反碼
以階碼為5位,尾數為11位的浮點數為例。當階碼和尾數都用補碼錶示時,機器零為×,××××;0.00000000000或者1,0000;×.××××××××××階碼用補碼錶示;如果階碼用移碼錶示,則為0,0000;×.××××××××××;全為機器零;即0,0000;0.0000000000,無論是階碼或者尾數全為“0”時,該數位機器零;有利於機器中“判0”電路的實現。

詳細釋義

所謂原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
來自 Programming the 80386(80386CPU設計者寫的書)來自 Programming the 80386(80386CPU設計者寫的書)
反碼錶示法規定:
正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持為1.對於二進制原碼10010求反碼:
((10010)=對正數(00010)含符號位取反= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進制= -2 十進制
對於八進制:
舉例 某linux平台設定了默認的目錄許可權為755(rwxr-xr-x),八進制表示為0755,那么,umask是許可權位755的反碼,計算得到umask為0022的過程如下:
原碼0755= 反碼 0022 (逐位解釋:0為符號位,0為7-7,2為7-5,2為7-5)
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

轉換

由於正數的原碼、補碼、反碼錶示方法均相同,不需轉換。
在此,僅以負數情況分析。
(1) 已知原碼,求補碼。
例:已知某數X的原碼為10110100B,試求X的補碼和反碼。
解:由[X]原=10110100B知,X為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 +1
1 1 0 0 1 1 00 補碼
故:[X]補=11001100B,[X]反=11001101B。
(2) 已知補碼,求原碼。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。
例:已知某數X的補碼11101110B,試求其原碼。
解:由[X]補=11101110B知,X為負數。
採用逆推法
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(末位減1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)

相關詞條

熱門詞條

聯絡我們