1. 程式人生 > >浮點數在計算機記憶體中的儲存方式。

浮點數在計算機記憶體中的儲存方式。

                                                                        浮點數在計算機記憶體中的儲存方式

            整數在計算機記憶體中是以其二進位制的原碼,補碼和反碼來表示的,其中正數的二進位制的原碼,補碼及反碼都是其本身。例如:
   A=+62;【A】原=[A]反=【A】補=0 111110;
而負數的原碼,反碼和補碼是不同的。其轉換規則是:負數原碼是其正直的原碼符號位取反(即1表示負號,0表示正號)  負數的反碼是其原碼除符號位外各位取反。其補碼是其反碼加一。例如:
   A=-62;  [A]原=1 111110;   【A】反=1 000001;【A】補=1 000010;
            但浮點數在計算機中卻無法用這種方式來儲存。它們在計算機記憶體中一般採用定點表示法與浮點表示法來儲存的。下面來分別介紹定點表示法和浮點表示法;

            (1)    定點表示法 規定:計算機中所有數的小數點的位置是固定不變的,因此小數點無需使用專門的記號表示出來。而在定點的小數格式中,把小數點固定在數值部分最高位的左邊。任一定點小數的計算機內表示形式如下:
              [ N0]               .      【N-1][N-2][......][N-m】
              符號位        小數點         數值部分
對於二進位制的(m+1)位定點小數格式的數N所能表示的範圍是:
                         |N|<=1-2^(-m)
  因此定點小數格式表示的所有數都是絕對值小於一的純小數。對於絕對值大於一的數,如果直接使用定點小數格式將會產生“溢位”,所以需要根據實際需要使用一個“比例因子”,將原始資料按該比例縮小,以定點小數格式表示,得出的結果再按該比例擴大,才得到實際的結果。
            (2)浮點表示法:

              一個浮點數分為階碼和位數兩部分,階碼用於表示小數點在該數中的位置,尾數用於表示數的有效數值。由於階碼錶示小數點的位置,所以階碼總是一個(正,負)整數 ,尾數可以採用整數和純小數兩種形式 。(類似整數科學技術法);  N=234567*10^-3=2345670*10^-4=0.234567*10^3;
        計算機內部,階碼通常採用補碼形式的二進位制整數表示,尾數通常採用原碼形式的二進位制小數表示。階碼和尾數佔用的位數可以靈活設定,階碼確定數的表示範圍,尾數確定數的精度。所以有階碼位數多則範圍大,尾數位數多則精度高。
 設計算機的字長為32則:     【一位】    【   八位  】   【二十三位】
                                       符號位      階碼部分         尾數部分
       其規格化浮點數表示範圍為:_+1/2*2^-128~+-(1-2^-24)*2^127
   浮點表示法要注意,為提高精度通常規定其尾數的最高位必須是非零的有效位。這是浮點數的規格化形式。


  關於浮點數溢位:如果一個數的階大於計算機所能表示的最大階碼,則稱為上溢,
小於計算機所能表示的最小階碼,則為下溢。上溢時計算機無法繼續運算,應該以溢位中斷處理。下溢時計算機將該數作為機器零來處理。