-
1 # 使用者4703941968598
-
2 # 使用者3601644206959661
計算機用二進位制來表示數字,浮點數也是如此: 首先了解如何用二進位制表示小數(也就是如何把十進位制小數轉化為二進位制表示): 舉一個簡單例子,十進位制小數10.625 1)首先轉換整數部分:10=1010b 2)小數部分0.625=0.101b (用“乘2取整法”:0.625*2=1.25,得第一位為1,0.25*2=0.5,得第二位為0,0.5*2=1,得第三位為1,餘下小數部分為零,就可以結束了) 3)於是得到10.625=1010.101b 換個表示方式更加深入理解: 1*(10^1)+0*(10^0)+6*(10^-1)+2*(10^-2)+5*(10^-3)= 1*(2^3)+0*(2^2)+1*(2^1)+0*(2^0)+1*(2^-1)+0*(2^-2)+1*(2^-3) 4)類似十進位制可以用指數形式表示: 10.625=10625*(10^-3) 所得的二進位制小數也可以這樣指數形式表述: 1010.101b=1010101*(2^-3) 也就是用有效數字a和指數e來表述:a*(2^e) 用一個32bit的空間(bit0~bit31)來儲存這麼一個浮點數,如此分配儲存空間: bit0~bit22共23bit,用來表示有效數字部分,也就是a,本例中a=1010101 bit23-bit30共8個bit,用來表是指數,也就是e,範圍從-128到127,實際資料中的指數是原始指數加上127得到的,如果超過了127,則從-128開始計,所以這裡e=-3表示為124 bit31為符號位,1表示負數,這裡應該為0 把上述結果填入32bit的儲存器,就是計算機表示小數10.625的形式。 注意這個例子的特殊性:它的小數部分正好可以用有限長度的2進位制小數表示,因此,而且整個有效數字部分a的總長度小於23,因此它精確的表示了10.625,但是有的情況下,有效數字部分的長度可能超過23,甚至是無限多的,那時候就只好把後面的位數截掉了,那樣表示的結果就只是一個近似值而非精確值;顯然,儲存長度越長,精度就越高,比如雙精度浮點數長度為64位,1位符號位,11位指數位,52位有效數字。
回覆列表
對於浮點型別的資料採用單精度型別(float)和雙精度型別(double)來儲存,float資料佔用32bit,double資料佔用64bit。無論是單精度還是雙精度在儲存中都分為三個部分:
1、符號位(Sign) : 0代表正,1代表為負。
2、指數位(Exponent):用於儲存科學計數法中的指數資料,並且採用移位儲存。
3、尾數部分(Mantissa):尾數部分。擴充套件資料實型變數分為兩類:單精度型和雙精度型,實型變數說明的格式和書寫規則與整型相同。例如: float x,y; (x,y為單精度實型量)double a,b,c; (a,b,c為雙精度實型量)實型常數不分單、雙精度,都按雙精度double型處理。