原碼、反碼、補碼概念及轉換


數據在計算機內部是以補碼的形式存儲

數據分為有符號數和無符號數

無符號數為正數,有符號數為負數,計算機內部是以補碼的形式存儲的

正數的首位地址為0,其原碼是由十進制數轉換為二進制數

負數的首位地址為1,其原碼是由十進制數轉換為二進制數,然後將首位地址改為1

對於一個數,計算機要使用一定的編碼方式進行存儲,原碼、反碼、補碼是機器存儲一個具體數字的編碼方式,原碼、反碼、補碼是計算機原理的術語。說白了就是為了理解計算機使用二進制進行運算的原理。對於C/C++來說,是和數據類型有關的

一、原碼、反碼、補碼

三種表示法的轉換過程如下:

原碼、反碼、補碼概念及轉換


說明:

特別的,在原碼中0有兩種表示方式:[+0]原=0000000,[-0]原=1000000。

在反碼錶示中,0也有兩種表示形式:[+0]反=0000000,[-0]反=11111111。

在補碼錶示中,0有唯一的編碼:[+0]補=0000000,[-0]補=0000000。


二、移碼

移碼錶示法是在數X上增加一個偏移量來定義的,常用來表示浮點數中的階碼,所以是整數。如果機器字長為n,規定偏移量為2^(n-1)。若X是整數,則[X]移=2^(n-1)+X

則[+45]=+0101101+10000000, [-45]=-0101101+10000000=01010011

實際上由此可推出,在偏移2^(n-1)的情況下,只要將補碼的符號位取反便可獲得相應的移碼錶示。

原碼、反碼、補碼概念及轉換


說明:在移碼錶示中,0也編碼是相同的,[+0]移=1000000,[-0]移=1000000。

計算機之所以這些編碼方法是為了便於運算,提高運算速度。四種表示方法其實是層層遞進的,即會求十進制的二進制表示,記住符號位的正負表示,知道怎麼遞進的它們之間的關係。


分享到:


相關文章: