數(shù)據(jù)表示基礎(chǔ):原、反、補(bǔ)碼、移碼詳解
到目前為止,我們學(xué)習(xí)了十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制等用來代表實際數(shù)值的數(shù),稱為真值,這些數(shù)我們再日常生活中都會使用到,那么在計算機(jī)中數(shù)值是怎么來表示的呢?
數(shù)在計算機(jī)中的表示形式統(tǒng)稱為機(jī)器數(shù)。計算機(jī)中處理數(shù)據(jù)及運算都是采用二進(jìn)制,通常規(guī)定機(jī)器數(shù)用八位二進(jìn)制表示。實用的數(shù)據(jù)有正數(shù)和負(fù)數(shù),因為計算機(jī)只能表示0、1兩種狀態(tài),數(shù)據(jù)的正號“+”或負(fù)號“-”,在計算機(jī)里就用一位二進(jìn)制的0或1來區(qū)別,通常放在最高位,成為符號位。 符號位數(shù)值化之后,為能方便的對機(jī)器數(shù)進(jìn)行算術(shù)運算、提高運算速度,計算機(jī)設(shè)計了多種符號位與數(shù)值一起編碼的方法,最常用的機(jī)器數(shù)表示方法有:原碼、反碼、補(bǔ)碼和移碼,下面就分別介紹一下它們的表示方法。
一、原碼、反碼、補(bǔ)碼
三種表示法的轉(zhuǎn)換過程如下:
說明:
特別的,在原碼中0有兩種表示方式:[+0]原=0000000,[-0]原=1000000。
在反碼表示中,0也有兩種表示形式:[+0]反=0000000,[-0]反=11111111。
在補(bǔ)碼表示中,0有唯一的編碼:[+0]補(bǔ)=0000000,[-0]補(bǔ)=0000000。
二、移碼
因為個人移碼理解有點困難,so單獨解釋一下:
移碼表示法是在數(shù)X上增加一個偏移量來定義的,常用來表示浮點數(shù)中的階碼,所以是整數(shù)。如果機(jī)器字長為n,規(guī)定偏移量為2^(n-1)。若X是整數(shù),則[X]移=2^(n-1)+X
則[+45]=+0101101+10000000, [-45]=-0101101+10000000=01010011
實際上由此可推出,在偏移2^(n-1)的情況下,只要將補(bǔ)碼的符號位取反便可獲得相應(yīng)的移碼表示。
說明:在移碼表示中,0也編碼是相同的,[+0]移=1000000,[-0]移=1000000。
計算機(jī)之所以這些編碼方法是為了便于運算,提高運算速度。四種表示方法其實是層層遞進(jìn)的,即會求十進(jìn)制的二進(jìn)制表示,記住符號位的正負(fù)表示,知道怎么遞進(jìn)的它們之間的關(guān)系。