浮点数[ZT]
浮點(diǎn)數(shù)保存的字節(jié)格式如下:
地址 +0???????????? +1?????????????? +2?????????????? +3
內(nèi)容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
這里
S 代表符號(hào)位,1是負(fù),0是正
E 偏移127的冪,二進(jìn)制階碼=(EEEEEEEE)-127。
M 24位的尾數(shù)保存在23位中,只存儲(chǔ)23位,最高位固定為1。此方法用最較少的位數(shù)實(shí)現(xiàn)了
較高的有效位數(shù),提高了精度。
零是一個(gè)特定值,冪是0 尾數(shù)也是0。
舉例說明,浮點(diǎn)數(shù)-12.5作為一個(gè)十六進(jìn)制數(shù)0xC1480000保存在存儲(chǔ)區(qū)中,這個(gè)值如下:
地址 +0??? +1???? +2??? +3
內(nèi)容 0xC1 0x48 0x00 0x00
浮點(diǎn)數(shù)和十六進(jìn)制等效保存值之間的轉(zhuǎn)換相當(dāng)簡單。下面的例子說明上面的值-12.5如何轉(zhuǎn)換。
浮點(diǎn)保存值不是一個(gè)直接的格式,要轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù),位必須按上面的浮點(diǎn)數(shù)保存格式表所列的那樣分開,例如:
地址?????? +0???????????? +1?????????????? +2?????????????? +3
格式?????? SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二進(jìn)制??? 1100 0001? 0100 1000?? 0000 0000???? 0000 0000
十六進(jìn)制? C1??????????? 48??????????????? 00??????????????? 00
從這個(gè)例子可以得到下面的信息:
符號(hào)位是1 表示一個(gè)負(fù)數(shù)
冪是二進(jìn)制10000010或十進(jìn)制130,130減去127是3,就是實(shí)際的冪。
尾數(shù)是后面的二進(jìn)制數(shù)10010000000000000000000
在尾數(shù)的左邊有一個(gè)省略的小數(shù)點(diǎn)和1,這個(gè)1在浮點(diǎn)數(shù)的保存中經(jīng)常省略,加上一個(gè)1和小數(shù)點(diǎn)到尾數(shù)的開頭,得到尾數(shù)值如下:
1.10010000000000000000000
接著,根據(jù)指數(shù)調(diào)整尾數(shù)。一個(gè)負(fù)的指數(shù)向左移動(dòng)小數(shù)點(diǎn)。一個(gè)正的指數(shù)向右移動(dòng)小數(shù)點(diǎn)。因?yàn)橹笖?shù)是3,尾數(shù)調(diào)整如下:
1100.10000000000000000000
結(jié)果是一個(gè)二進(jìn)制浮點(diǎn)數(shù),小數(shù)點(diǎn)左邊的二進(jìn)制數(shù)代表所處位置的2的冪,例如:
1100表示 (1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12
小數(shù)點(diǎn)的右邊也代表所處位置的2的冪,只是冪是負(fù)的。例如:
.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5
這些值的和是12.5。
因?yàn)樵O(shè)置的符號(hào)位表示這數(shù)是負(fù)的,因此十六進(jìn)制值0xC1480000表示-12.5
地址 +0???????????? +1?????????????? +2?????????????? +3
內(nèi)容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
這里
S 代表符號(hào)位,1是負(fù),0是正
E 偏移127的冪,二進(jìn)制階碼=(EEEEEEEE)-127。
M 24位的尾數(shù)保存在23位中,只存儲(chǔ)23位,最高位固定為1。此方法用最較少的位數(shù)實(shí)現(xiàn)了
較高的有效位數(shù),提高了精度。
零是一個(gè)特定值,冪是0 尾數(shù)也是0。
舉例說明,浮點(diǎn)數(shù)-12.5作為一個(gè)十六進(jìn)制數(shù)0xC1480000保存在存儲(chǔ)區(qū)中,這個(gè)值如下:
地址 +0??? +1???? +2??? +3
內(nèi)容 0xC1 0x48 0x00 0x00
浮點(diǎn)數(shù)和十六進(jìn)制等效保存值之間的轉(zhuǎn)換相當(dāng)簡單。下面的例子說明上面的值-12.5如何轉(zhuǎn)換。
浮點(diǎn)保存值不是一個(gè)直接的格式,要轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù),位必須按上面的浮點(diǎn)數(shù)保存格式表所列的那樣分開,例如:
地址?????? +0???????????? +1?????????????? +2?????????????? +3
格式?????? SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二進(jìn)制??? 1100 0001? 0100 1000?? 0000 0000???? 0000 0000
十六進(jìn)制? C1??????????? 48??????????????? 00??????????????? 00
從這個(gè)例子可以得到下面的信息:
符號(hào)位是1 表示一個(gè)負(fù)數(shù)
冪是二進(jìn)制10000010或十進(jìn)制130,130減去127是3,就是實(shí)際的冪。
尾數(shù)是后面的二進(jìn)制數(shù)10010000000000000000000
在尾數(shù)的左邊有一個(gè)省略的小數(shù)點(diǎn)和1,這個(gè)1在浮點(diǎn)數(shù)的保存中經(jīng)常省略,加上一個(gè)1和小數(shù)點(diǎn)到尾數(shù)的開頭,得到尾數(shù)值如下:
1.10010000000000000000000
接著,根據(jù)指數(shù)調(diào)整尾數(shù)。一個(gè)負(fù)的指數(shù)向左移動(dòng)小數(shù)點(diǎn)。一個(gè)正的指數(shù)向右移動(dòng)小數(shù)點(diǎn)。因?yàn)橹笖?shù)是3,尾數(shù)調(diào)整如下:
1100.10000000000000000000
結(jié)果是一個(gè)二進(jìn)制浮點(diǎn)數(shù),小數(shù)點(diǎn)左邊的二進(jìn)制數(shù)代表所處位置的2的冪,例如:
1100表示 (1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12
小數(shù)點(diǎn)的右邊也代表所處位置的2的冪,只是冪是負(fù)的。例如:
.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5
這些值的和是12.5。
因?yàn)樵O(shè)置的符號(hào)位表示這數(shù)是負(fù)的,因此十六進(jìn)制值0xC1480000表示-12.5
轉(zhuǎn)載于:https://www.cnblogs.com/mixiyou/archive/2009/08/16/1547434.html
總結(jié)
- 上一篇: 好久不碰Blog,最近要二次毕业了,继续
- 下一篇: OOo on ready---VB篇