C語言中float類型在內存中的表示

原帖地址:點擊打開鏈接

一個float型實數在內存中佔4個字節,即32個二進制bit,從低位到高位依次叫第0位到第31位.這32位可以分爲3個部分:符號位(第31位),階碼(第30位到第23位共8位),尾數(最低23位)。

1、符號位。最高位也就是第31位表示這個實數是正數還是負數,爲0表示正數或0,爲1表示負數.

2、階碼。第30位到第23位這8個二進制位表示該實數轉化爲規格化的二進制實數後的指數與127(127即所謂偏移量)之和即所謂階碼. 
規格化的二進制實數的指數只能在-127----+127之間,所以,一個float型數的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.

3、尾數。其他最低的23位即第22位到第0位表示該實數轉化爲規格化的二進制實數後小數點以後的其餘各位即所謂尾數.


例:將十進制20.59375表示成機器內的32個字節的二進制形式.

第一步:將20.59375表示成二進制數:10100.10011; 
第二步:將二進制形式的浮點實數轉化爲規格化的形式:(小數點向左移動,使其在第1,2位之間) 
10100.10011=1.010010011*2^4,所以;
符號位:該數爲正數,故第31位爲0,佔一個二進制位. 
階碼:因爲指數爲4,故其階碼爲127+4=131=10000011
尾數:爲小數點後的部分, 即010010011,記住,整數部分的1隱藏,不用表示在內存裏面的,因爲尾數共23個二進制位,所以低位補0,即010010011後面補14個0,即01001001100000000000000
所以20.59375在內存中的實際表示方式爲: 
0 10000011 01001001100000000000000

例:1.0在內存中的表示是:3f800000;

         0.0在內存中的表示是:0000000.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章