1. 程式人生 > >資料的格式&數的機器碼錶示:原碼、補碼、反碼、移碼

資料的格式&數的機器碼錶示:原碼、補碼、反碼、移碼

    在瞭解數的機器碼之前先說一下資料的格式

    計算機儲存資料使用2進位制,那麼計算機如何儲存小數?在計算機裡儲存小數,那個小數點並不會使用二進位制特別表示,如果用二進位制表示,估計計算機要完成算術運算也是夠嗆的...小數的儲存另有方法

    純小數純整數在計算機中儲存的格式我們一般稱為定點數

    定點數——小數點是固定的

    比如,計算機用n+1位(從0開始計數,X0,X1... Xn)來儲存一個有符號資料,那麼,最高位X0即為數符,當X0 = 1,資料為負數;當X0 = 0,資料為正數,。後面的n位尾數則用來儲存數的量值。

    小數點在X0與X1之間的則是純小數,小數點在Xn後面的則是純整數。定點數的小數點完全靠事先約定而隱含在兩個不同位置(見下面的浮點數)。

    浮點數

    比較官方的解釋:所謂浮點格式,是指在表示資料時,將浮點數的範圍和精度分別表示,相當於小數點的位置隨比例因子的不同而在一定的範圍內可自由浮動。

    任何一個進位制數N,都可以用N = M * R^E 來表示,其中,M是尾數,R是基數,E是階碼。比如,十進位制的123.456可以表示成1.23456 * 10^2,0.0123可以表示成1.23 * 10^(-2)。

IEE754標準中的兩種浮點數格式

    IEE754標準中規定了兩種浮點數格式:單精度浮點數(32位)、雙精度浮點數格式(64位),在上圖中,S是數符,用0、1來判別資料的正負;E是階碼,就是指數;M是尾數;因為計算機使用2進位制儲存資料,所以基數都是2。在這樣的儲存中,階碼的正負也並沒有直接用二進位制來表示,而是經過計算得出,比如求一個規範化的32位浮點數x的真值(正負號加絕對值表示的數),用以下圖中的公式,而64位的計算則要把(E-127)換成(E-1023)。

數的機器碼

    簡單來說,對於有符號的資料,原碼由符號位和尾數(資料絕對值的二進位制)組成;正數的反碼就是原碼,負數的反碼符號位不變,尾數按位取反;正數補碼也是原碼,負數補碼符號位不變尾數按位取反後加1;移碼不能表示定點小數,求一個原碼的移碼,可以先求它的補碼,然後再將符號位取反(就這麼簡單)。

    原碼

一種比較直觀的機器碼錶示方法,在資料的二進位制原碼中,最高位為符號位,剩下的部分表示資料的絕對值。那麼,假設對於定點數x(設x為一個二進位制真值,比如0.1011、-11001、-0.1101),x的原碼([x]原)表示定義如下

    對於定點小數和定點整數,0的原碼各有兩種形式+0,-0。

    反碼

假設對於定點數x(設x為一個二進位制真值),x的反碼([x]反)表示定義如下

    在反碼中,也有+0,-0之分。如果想要將反碼變回原碼,首先判斷符號位,如果為0(正數),那麼原碼就是反碼;如果為1(負數),符號位不變,尾數按位取反。

    補碼

假設對於定點數x(設x為一個二進位制真值),x的補碼([x]補)表示定義如下

   0的補碼是唯一的。由補碼求原碼,首先判斷符號位,如果為0(正數),那麼原碼就是補碼;如果為1(負數),符號位不變,尾數按位取反並在末尾加1。

    移碼

假設對於定點數x(設x為一個二進位制真值),x的補碼([x]移)表示定義如下

    若已知一個數的移碼要求原碼,可以先將移碼的符號位取反得到補碼,再將補碼轉換成該數的真值。