反碼

反碼

數值存儲
多應用于系統環境設置,如linux平台的目錄和文件的默認權限的設置umask,就是使用反碼原理。在計算機内,定點數有3種表示法:原碼、反碼和補碼。把十進制數轉換成二進制數後,二進制數就是原碼例如:十進制: ----->二進制:10“二進制:10“就是原碼。
  • 中文名:反碼
  • 外文名:Inverse code
  • 所屬領域:計算機
  • 作 用:存儲數值
  • 附 加:多數計算機不采用反碼表示數值

概述

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

原碼

原碼是計算機機器數中最簡單的一種形式,數值位就是真值的絕對值,符号位位“0”時表示正數,符号位為“1”時表示負數,原碼又稱帶符号的絕對值。為了方便整數和小數區别,整數的符号位與數值位之間用“,”隔開,小數的符号位與數值位之間用“.”隔開。

根據2個定義可以看出,原碼的整數和小數中“0”的表示形式各有2種,“+0”和“-0”不一樣,以8位機器數為例,整數的“+0”原碼為0,0000000;整數的“-0”原碼為1,0000000;小數的“+0”原碼為0.0000000,小數的“-0”原碼為1.0000000。滿足條件的數,帶入定義裡面計算機,主要機器數位,直接計算得到。

反碼

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

補碼

補碼是計算機把減法運算轉化為加法運算的關鍵編碼,整數的補碼碼定義如圖2中圖5整數補碼定義,小數的定義如圖2中圖6小數補碼碼定義。如何利用先進的科學技術,開發一款能夠對功能各異的外部設備進行集中管理,并接受上層統一控制的嵌入式通信控制器,成了當前特種車輛制造中的關鍵問題。

根據2個定義可以看出,補碼的整數和小數中“0”的表示形式各隻有1種,“+0”和“-0”一樣,以8位機器數為例,整數的“+0”和“-0”補碼為0,0000000;小數的“+0”和“-0”補碼為0.0000000。因為根據定義x為“-0”,以8位機器數為例,為負數求補碼,根據公式得2^8+(-0),即100000000+(-0),機器數位8位,所以為00000000,跟“+0”得到的補碼一樣。1,0000000補碼,表示的數位-128。補碼有下面2個性質,根據這2個性質可以把減法轉化為加法來看。

移碼

計算機中如何判斷一個數是否為“機器零”有兩條件,分别為當浮點數尾數為0時,不論其階碼為何值按機器零處理;另外,當浮點數階碼等于或小于它所表示的最小數時,不論尾數為何值,按機器零處理。階碼都是整數,為了機器好判斷設置了移碼。移碼的定義

以階碼為5位,尾數為11位的浮點數為例。當階碼和尾數都用補碼表示時,機器零為×,××××;0.00000000000或者1,0000;×.××××××××××階碼用補碼表示;如果階碼用移碼表示,則為0,0000;×.××××××××××;全為機器零;即0,0000;0.0000000000,無論是階碼或者尾數全為“0”時,該數位機器零;有利于機器中“判0”電路的實現。

詳細釋義

所謂原碼就是二進制定點表示法,即最高位為符号位,“0”表示正,“1”表示負,其餘位表示數值的大小。

反碼表示法規定:

正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符号位保持為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。

1011 100原碼

11001011反碼,符号位不變,數值位取反,即其補碼為11001011+1=11001100

11001100補碼

故:[X]補=11001100B,[X]反=11001011B。

(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原碼(符号位不變,數值位取反)

相關詞條

相關搜索

其它詞條