浮點數儲存的位元組格式如下:
位址 +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)
浮點數在記憶體中的儲存方式
浮點數儲存的位元組格式如下 位址 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的架構...