常用的浮點數存儲格式:32-bit IEEE-754 floating-point format
對于大小為32-bit的浮點數(32-bit為單精度,64-bit浮點數為雙精度,80-bit為擴展精度浮點數),
1、其第31 bit為符號位,為0則表示正數,反之為復數,其讀數值用s表示;
2、第30~23 bit為冪數,其讀數值用e表示;
3、第22~0 bit共23 bit作為系數,視為二進制純小數,假定該小數的十進制值為x;
十進制轉浮點數的計算方法:則按照規定,十進制的值用浮點數表示為:
如果十進制為正,則s = 0,否則s = 1;將十進制數表示成二進制,然后將小數點向左移動,直到這個數變為1.x的形式即尾數,移動的個數即位指數。為了保證指數為正,將移動的個數都加上127,由于尾數的整數位始終為1,故舍去不做記憶。
對3.141592654來說,
1、正數,s = 0;
2、3.141592654的二進制形式為正數部分計算方法是除以二取整,即得11,小數部分的計算方法是乘以二取其整數,得0.0010 0100 0011 1111 0110 1010 1000,那么它的二進制數表示為11.0010 0100 0011 1111 0110 1010 1;
3、將小數點向左移一位,那么它就變為1.1001 0010 0001 1111 1011 0101 01,所以指數為1+127=128,e = 128 = 1000 0000;
4、舍掉尾數的整數部分1,尾數寫成0.1001 0010 0001 1111 1011 0101 01,x = 921FB6
5、最后它的浮點是表示為0 1000 0000 1001 0010 0001 1111 1011 0101 = 40490FDA
浮點數轉十進制的計算方法:
則按照規定,浮點數的值用十進制表示為:
= (-1)^s * (1 + x) * 2^(e - 127)
對于49E48E68來說,
1、其第31 bit為0,即s = 0
2、第30~23 bit依次為100 1001 1,讀成十進制就是147,即e = 147。
3、第22~0 bit依次為110 0100 1000 1110 0110 1000,也就是二進制的純小數0.110 0100 1000 1110 0110 1000,其十進制形式為(0.110 0100 1000 1110 0110 1000 * 2^23) / (2^23) = (0x49E48E68 & 0x007FFFFF) / (2^23) = (0x648E68) / (2^23) = 0.78559589385986328125,即x = 0.78559589385986328125。
這樣,該浮點數的十進制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333
posted on 2007-04-02 22:28
藍迪 閱讀(2727)
評論(0) 編輯 收藏 引用