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

2021-05-11 00:25:05 字數 1733 閱讀 2543

浮點數儲存的位元組格式如下:

位址        +0          +1           +2           +3

內容    seee eeee   emmm mmmm    mmmm mmmm    mmmm mmmm

這裡s 代表符號位,1是負,0是正

e 偏移127的冪,二進位制階碼=(eeeeeeee)-127。

m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法用最較少的位數實現了

較高的有效位數,提高了精度。

零是乙個特定值,冪是0 尾數也是0。

浮點數-12.5作為乙個十六進製制數0xc1480000儲存在儲存區中,這個值如下:

位址 +0     +1     +2     +3

內容0xc1   0x48   0x00   0x00

浮點數和十六進製制等效儲存值之間的轉換相當簡單。下面的例子說明上面的值-12.5如何轉

換。浮點儲存值不是乙個直接的格式,要轉換為乙個浮點數,位必須按上面的浮點數儲存格式表

所列的那樣分開,例如:

位址       +0           +1            +2            +3

格式   seee eeee    emmm mmmm     mmmm mmmm     mmmm mmmm

二進位制  11000001     01001000      00000000      00000000

十六進製制   c1           48            00            00

從這個例子可以得到下面的資訊:

符號位是1 表示乙個負數

冪是二進位制10000010或十進位制130,130減去127是3,就是實際的冪。

尾數是後面的二進位制數10010000000000000000000

在尾數的左邊有乙個省略的小數點和1,這個1在浮點數的儲存中經常省略,加上乙個1和小數

點到尾數的開頭,得到尾數值如下:

1.10010000000000000000000

接著,根據指數調整尾數.乙個負的指數向左移動小數點.乙個正的指數向右移動小數點.因為

指數是3,尾數調整如下:

1100.10000000000000000000

結果是乙個二進位制浮點數,小數點左邊的二進位制數代表所處位置的2的冪,例如:1100表示

(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。

小數點的右邊也代表所處位置的2的冪,只是冪是負的。例如:.100...表示(1*2^(-1))+

(0*2^(-2))+(0*2^(-2))...=0.5。

這些值的和是12.5。因為設定的符號位表示這數是負的,因此十六進製制值0xc1480000表示-

12.5。

下面給個例子

#include

union floatdata

; void main(void)

{floatdata t;

float temp = 0;

printf("請輸入乙個數,輸入100表示結束:");

scanf("%f",&temp);

t.f = temp;

printf("%f在記憶體中的存放為:%2x %2x %2x %2x/n",t.f,t.h[0],t.h[1],t.h[2],t.h[3]);

原帖:http://blog.csdn.net/lijuwen/archive/2006/04/12/660260.aspx

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

浮點數儲存的位元組格式如下 位址 0 1 2 3 內容 seee eeee emmm mmmm mmmm mmmm mmmm mmmm 這裡s 代表符號位,1是負,0是正 e 偏移127的冪,二進位制階碼 eeeeeeee 127。m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法...

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

浮點數儲存的位元組格式如下 位址 0 1 2 3 內容 seee eeee emmm mmmm mmmm mmmm mmmm mmmm 這裡s 代表符號位,1是負,0是正 e 偏移127的冪,二進位制階碼 eeeeeeee 127。m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法...

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

浮點數在記憶體中的儲存方式 任何資料在記憶體中都是以二進位制的形式儲存的,例如乙個short型資料1156,其二進位制表示形式為00000100 10000100。則在intel cpu架構的系統中,存放方式為 10000100 低位址單元 00000100 高位址單元 因為intel cpu的架構...