浮点数在计算机中起什么作用,浮点数在计算机中的存储表示
今天在看面試寶典,注意到上面所說浮點(diǎn)數(shù)在內(nèi)存里和整數(shù)的存儲方式不同,但究竟有何不同呢?
在網(wǎng)上搜了一下:
在http://blog.csdn.net/djsl6071/archive/2007/03/16/1531336.aspx中介紹了浮點(diǎn)數(shù)在內(nèi)存中的存儲方式,覺得不錯,轉(zhuǎn)過來。
浮點(diǎn)數(shù)在內(nèi)存中的存儲方式浮點(diǎn)數(shù)保存的字節(jié)格式如下:
地址??????? +0????????? +1?????????? +2?????????? +3
內(nèi)容??? SEEE EEEE?? EMMM MMMM??? MMMM MMMM??? MMMM MMMM
這里
S 代表符號位,1是負(fù),0是正
E 偏移127的冪,二進(jìn)制階碼=(EEEEEEEE)-127。
M 24位的尾數(shù)保存在23位中,只存儲23位,最高位固定為1。此方法用最較少的位數(shù)實(shí)現(xiàn)了
較高的有效位數(shù),提高了精度。
零是一個特定值,冪是0 尾數(shù)也是0。
浮點(diǎn)數(shù)-12.5作為一個十六進(jìn)制數(shù)0xC1480000保存在存儲區(qū)中,這個值如下:
地址 +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)保存值不是一個直接的格式,要轉(zhuǎn)換為一個浮點(diǎn)數(shù),位必須按上面的浮點(diǎn)數(shù)保存格式表
所列的那樣分開,例如:
地址?????? +0?????????? +1??????????? +2??????????? +3
格式?? SEEE EEEE??? EMMM MMMM???? MMMM MMMM???? MMMM MMMM
二進(jìn)制? 11000001???? 01001000????? 00000000????? 00000000
十六進(jìn)制?? C1?????????? 48??????????? 00??????????? 00
從這個例子可以得到下面的信息:
符號位是1 表示一個負(fù)數(shù)
冪是二進(jìn)制10000010或十進(jìn)制130,130減去127是3,就是實(shí)際的冪。
尾數(shù)是后面的二進(jìn)制數(shù)10010000000000000000000
在尾數(shù)的左邊有一個省略的小數(shù)點(diǎn)和1,這個1在浮點(diǎn)數(shù)的保存中經(jīng)常省略,加上一個1和小數(shù)
點(diǎn)到尾數(shù)的開頭,得到尾數(shù)值如下:
1.10010000000000000000000
接著,根據(jù)指數(shù)調(diào)整尾數(shù).一個負(fù)的指數(shù)向左移動小數(shù)點(diǎn).一個正的指數(shù)向右移動小數(shù)點(diǎn).因?yàn)?/p>
指數(shù)是3,尾數(shù)調(diào)整如下:
1100.10000000000000000000
結(jié)果是一個二進(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è)置的符號位表示這數(shù)是負(fù)的,因此十六進(jìn)制值0xC1480000表示-
12.5。
關(guān)于多字節(jié)數(shù)據(jù)類型在內(nèi)存中的存儲問題
int ,short 分別是4、2字節(jié)。他們在內(nèi)存中的存儲方式下面舉個例子說明。
int data = 0xf4f3f2f1;
其中低位存放在編址小的內(nèi)存單元,高位存放在編址高的內(nèi)存單元
如下:
地址:0x8000????? 0x8001??? 0x8002?? 0x8003
數(shù)據(jù):?? f1????????????? f2??????????? f3????????? f4
根據(jù)IEEE在1985年制定的標(biāo)準(zhǔn)來處理浮點(diǎn)數(shù)
單精度浮點(diǎn)數(shù)用4字節(jié),包括1位符號位s(整數(shù)為0,負(fù)數(shù)為1),8位指數(shù)位e,23位有效位f
浮點(diǎn)型使用的是科學(xué)計(jì)數(shù)法,比如十進(jìn)制的12345可以表示為1.2345 * 10^4(表示10的4次冪)
用二進(jìn)制表示為 1.1000000111001 * 2^13
所以計(jì)算機(jī)中用浮點(diǎn)數(shù)表示12345這個十進(jìn)制應(yīng)該是這樣的,s位為0,因?yàn)槭钦龜?shù),指數(shù)位為13+127=140(127為單精度浮點(diǎn)數(shù)偏移值,為了表示只有小數(shù)部分的數(shù)),有效位為1000000111001
計(jì)算的時(shí)候用 (-1)^s * 1.f * 2^(e-127) ,結(jié)果就是 1* 1.1000000111001 * 2^(140-127=13) ,和我們剛才表示的一樣
還比如,十進(jìn)制小數(shù)0.125轉(zhuǎn)換為二進(jìn)制小數(shù)0.001可以表示為 1* 1.0 * 2^(124-127=-3)
double,雙精度浮點(diǎn)數(shù)有1位符號位、11位指數(shù)位和52位有效數(shù)
謝謝,和我找的資料差不多:)
知道公式
n=(-1)^s*m*2^e
e=|E|-bias
bias = 2^(k-1)-1(k為E的位數(shù))
m=|1.M|
知道12345在內(nèi)存中的10進(jìn)制表示以后
0x4640e400 = 0(100 0110 0)<100 0000 1110 0100 0000>
括號中的數(shù)字為|E| = 140 所以e=140-127=13
尖括號中的數(shù)字為m=|1.M|=|1.100000011100100|=1.506958008
ok,
代入公式n = (-1)^0*1.506958008*2^13=12345
完工!!
posted on 2009-10-02 20:51 Sandy 閱讀(945) 評論(0) ?編輯?收藏 引用 所屬分類: c++學(xué)習(xí)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的浮点数在计算机中起什么作用,浮点数在计算机中的存储表示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机维修队,浙江万里学院计算机维修队
- 下一篇: 滨江机器人餐厅_餐厅来了机器人服务员