float在內存中如何存儲?


float為浮點型,32位機器中占4字節共32bit,下標0~31.

31 位:符號位,正數為0,負數為1。

30 位:方向位。小數點左移位1,右移為0。

23~29:共7位,指數位。=指數-1。

0~22:共23位,尾數。

轉換方法:

1 整數部分轉成二進制。整數不停的除2,直到商位0。逆序取出每次的余數。

2 小數部分轉成二進制。小數部分不停的乘2,直到結果的小數部分位0.正序取出每次的商。

3 第一步和第二步得到數據拼接。第一步得到的結果在小數點左邊,第二步得到的在小數點右邊。轉為科學計數法。

4 拼接。按照上面的bit說明填充。尾數不夠,右邊補0.

舉例:寫出8.25 12.5 0.25 都是如何在內存中保存。

 

8.25的存儲計算方法:

  1. 整數部分8轉成二進制:

    8/2=4 余 0

    4/2=2 余0

    2/2=1 余0

    1/2=0 余1 商位0 那么停止。 得到逆序 1000    

     2、小數部分0.25轉位二進制:

    0.25*2=0.5 整數部分 0

    0.5*2=1.0  整數部分 1 次是小數部分為0 停止。得到正序 01

  3、用2進制:

    1000.01 = 1.00001 * 2的3次方。小數點左移了3位。

  4、

    31 :0

    30:  1

    指數位:3-1=2=0000010

    尾數:0000 1000 0000 0000 0000 000

 

  最終:0100 0001 0000 0100 0000 0000 0000 0000=0x41040000

  以上可以看出 如果是-8.25 只需要最高位變為1即可。最終:1100 0001 0000 0100 0000 0000 0000 0000 = 0xC1040000

  

12.5的轉換過程:

 1 整數部分:

    12/2 = 6 余 0

    6/2=3 余 0

    3/2=1 余1

    1/2=0 余1

            得到余數逆序 1100

  2 小數部分:

      0.5*2=1.0 整數為1

  得到 1

 3: 得到二進制:1100.1=1.1001*2的3次方

  4: 0 1 0000010 1001 0000000000000000000 = 0x41480000

 

0.25轉化過程

1 整數部分轉換為 0

2 小數部分0.25 

    0.25*2=0.5 整數部分0

            0.5*2=1.0 整數部分1

3 得到0.01 = 1.0*2的-2次方

4 得到:0 0 1111101 0000000000000000000000=0x3E800000 指數部分 -2-1=-3=FD=11111101 拿走7位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM