浮點(diǎn)數(shù)的二進(jìn)制表示_第1頁(yè)
浮點(diǎn)數(shù)的二進(jìn)制表示_第2頁(yè)
浮點(diǎn)數(shù)的二進(jìn)制表示_第3頁(yè)
浮點(diǎn)數(shù)的二進(jìn)制表示_第4頁(yè)
浮點(diǎn)數(shù)的二進(jìn)制表示_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、浮點(diǎn)數(shù)的二進(jìn)制表示基礎(chǔ)知識(shí): 十進(jìn)制轉(zhuǎn)十六進(jìn)制 ;十六進(jìn)制轉(zhuǎn)二進(jìn)制;了解:目前 C/C+編譯器標(biāo)準(zhǔn)都遵照 IEEE 制定的浮點(diǎn)數(shù)表示法來(lái)進(jìn)行 float,double 運(yùn)算。這種結(jié) 構(gòu)是一種科學(xué)計(jì)數(shù)法,用符號(hào)、指數(shù)和尾數(shù)來(lái)表示,底數(shù)定為2即把一個(gè)浮點(diǎn)數(shù)表示為尾數(shù)乘以 2 的指數(shù)次方再添上符號(hào)。下面是具體的規(guī)格:符號(hào)位階碼尾數(shù)長(zhǎng)度f(wàn)loat182332double1115264以下通過(guò)幾個(gè)例子講解浮點(diǎn)數(shù)如何轉(zhuǎn)換為二進(jìn)制數(shù)例一:已知: double 類型 38414.4 。求:其對(duì)應(yīng)的二進(jìn)制表示。分析: double 類型共計(jì) 64 位,折合 8 字節(jié)。由最高到最低位分別是第 63、62、61、

2、0 位:最高位 63位是符號(hào)位, 1 表示該數(shù)為負(fù), 0表示該數(shù)為正;62-52 位,一共 11 位是指數(shù)位;51-0 位,一共 52 位是尾數(shù)位。步驟:按照 IEEE 浮點(diǎn)數(shù)表示法,下面先把 38414.4 轉(zhuǎn)換為十六進(jìn)制數(shù)。把整數(shù)部和小數(shù)部分開(kāi)處理 : 整數(shù)部直接化十六進(jìn)制: 960E。小數(shù)的處理 : 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+ 實(shí)際上這永遠(yuǎn)算不完!這就是著名的浮點(diǎn)數(shù)精度問(wèn)題。所以直到加上前面的整數(shù) 部分算夠 53 位就行了。隱藏位技術(shù):最高位的 1 不寫入內(nèi)存(最終保留下來(lái)的還是 52位) 如果你夠耐心,手工算到 53 位那么因該是: 38414

3、.4(10)=1001011000001110.0110101010101010101010101010101010101(2)科學(xué)記數(shù)法為: 1.001011000001110011010101010101010101010101010101010,1 右移了 15 位,所以指數(shù)為 15?;蛘呖梢匀缦吕斫猓?1.00101100000111001101010101010101010101010101010101012 215于是來(lái)看階碼,按 IEEE標(biāo)準(zhǔn)一共 11位,可以表示范圍是 -1024 1023 。因?yàn)橹?數(shù)可以為負(fù),為了便于計(jì)算,規(guī)定都先加上 1023(210-1) ,在這里,階碼

4、: 15+1023=1038。 二進(jìn)制表示為: 100 00001110;符號(hào)位:因?yàn)?38414.4 為正對(duì)應(yīng) 為 0; 合在一起(注:尾數(shù)二進(jìn)制最高位的 1 不要): 01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101例二:已知:整數(shù) 3490593(16 進(jìn)制表示為 0x354321) 。求:其對(duì)應(yīng)的浮點(diǎn)數(shù) 3490593.0 的二進(jìn)制表示。解法如下:先求出整數(shù) 3490593 的二進(jìn)制表示:H: 3 5 4 3 2 1 (十六進(jìn)制表示)B: 0011 0101 0100 0011 0010 00

5、01 (二進(jìn)制表示) 21即:1.1 0101 0100 0011 0010 0001 221可見(jiàn),從左算起第一個(gè) 1 后有 21位,我們將這 21 為作為浮點(diǎn)數(shù)的小數(shù)表示,單精度浮點(diǎn)數(shù) float 由符號(hào)位 1 位,指數(shù)域位 k=8 位,小數(shù)域位 ( 尾數(shù) )n=23 位構(gòu)成,因此對(duì)上面得到的 21 位小數(shù)位我們還需要補(bǔ)上 2個(gè) 0,得到浮點(diǎn)數(shù)的小數(shù)域表示為:1 0101 0100 0011 0010 0001 00float 類型的偏置量 Bias=2k-1=128-1=127 ,但還要補(bǔ)上剛才因?yàn)橛乙谱鳛樾?shù)部分的 21 位,因此偏置量為 127+21=148,就是 IEEE 浮點(diǎn)數(shù)表示

6、標(biāo)準(zhǔn):V = (- 1)s M2eE = e-Bias中的 e,此前計(jì)算 Bias=127 ,剛好驗(yàn)證了 E=148-127=21。將 148轉(zhuǎn)為二進(jìn)制表示為 1001 0100,加上符號(hào)位 0,最后得到二進(jìn)制浮點(diǎn)數(shù)表示1|8| 230100 1010 0101 0101 0000 1100 1000 0100 ,其 16進(jìn)制表示為:H:04 A C5584B:0100 1010 01010101 000011001000010021 | 這就是浮點(diǎn)數(shù) 3490593.0(0x4A550C84)的二進(jìn)制表示例三:0.5 的二進(jìn)制形式是 0.1它用浮點(diǎn)數(shù)的形式寫出來(lái)是如下格式0 01111110

7、 000000 00000000000000000符號(hào)位 階碼 小 數(shù)位 正數(shù)符號(hào)位為 0,負(fù)數(shù)符號(hào)位為 1 階碼是以 2為底的指數(shù) 小數(shù)位表示小數(shù)點(diǎn)后面的數(shù)字 下面我們來(lái)分析一下 0.5 是如何寫成 0 01111110 00000000000000000000000首先 0.5 是正數(shù)所以符號(hào)位為 0再來(lái)看階碼部分 ,0.5 的二進(jìn)制數(shù)是 0.1, 而 0.1 是 1.0*2(-1), 所以我們總結(jié)出來(lái) 要把二進(jìn)制數(shù)變成 (1.f)*2(exponent) 的形式,其中 exponent 是指數(shù) 而由于階碼有正負(fù)之分所以階碼 =127+exponent;即階碼 =127+(-1)=126

8、即 01111110余下的小數(shù)位為二進(jìn)制小數(shù)點(diǎn)后面的數(shù)字 , 即 00000000000000000000000由以上分析得 0.5 的浮點(diǎn)數(shù)存儲(chǔ)形式為 0 01111110 00000000000000000000000 注:如果只有小數(shù)部分 , 那么需要右移小數(shù)點(diǎn) . 比如右移 3位才能放到第一個(gè) 1的后面, 階 碼就是 127-3=124.例四(20.59375)10 = (10100.10011 )2首先分別將整數(shù)和分?jǐn)?shù)部分轉(zhuǎn)換成二進(jìn)制數(shù):20.59375 10100.10011然后移動(dòng)小數(shù)點(diǎn),使其在第 1,2 位之間10100.10011 1.01001001124即 e4于是得到:

9、S0, E4127131, M010010011最后得到 32 位浮點(diǎn)數(shù)的二進(jìn)制存儲(chǔ)格式為:0100 0001 1010 0100 1100 0000 0000 0000 (41A4C000)16 例五:-12.5 轉(zhuǎn)為單精度二進(jìn)制表示12.5:1. 整數(shù)部分 12,二進(jìn)制為 1100; 小數(shù)部分 0.5, 二進(jìn)制是 .1 ,先把他們連起來(lái),從第一個(gè)1 數(shù)起取 24 位(后面補(bǔ) 0 ):1100.10000000000000000000這部分是有效數(shù)字。(把小數(shù)點(diǎn)前后兩部分連起來(lái)再取掉頭前的1,就是尾數(shù))2. 把小數(shù)點(diǎn)移到第一個(gè) 1的后面,需要左移 3 位(1.1001000000000000

10、0000000*23), 加 上偏移量 127:127+3=130,二進(jìn)制是 10000010,這是階碼。3. -12.5 是負(fù)數(shù),所以符號(hào)位是 1。把符號(hào)位,階碼和尾數(shù)連起來(lái)。注意,尾數(shù)的第一位總是 1,所以規(guī)定不存這一位的 1,只取后 23 位:1 10000010 10010000000000000000000把這 32 位按 8 位一節(jié)整理一下,得: 11000001 01001000 00000000 00000000 就是十六進(jìn)制的 C1480000.例六:2.0256751. 整數(shù)部分 2,二進(jìn)制為 10; 小數(shù)部分 0.025675, 二進(jìn)制是 .000001101001001

11、0101001,先 把他們連起來(lái),從第一個(gè) 1數(shù)起取 24 位(后面補(bǔ) 0):10.0000011010010010101001 這部分是有效數(shù)字。把小數(shù)點(diǎn)前后兩部分連起來(lái)再取掉頭前的1,就是尾數(shù) :000000110100100101010012. 把小數(shù)點(diǎn)移到第一個(gè) 1 的后面,左移了 1 位, 加上偏移量 127:127+1=128,二進(jìn)制是 10000000,這是階碼。3. 2.025675 是正數(shù),所以符號(hào)位是 0。把符號(hào)位,階碼和尾數(shù)連起來(lái):0 10000000 00000011010010010101001把這 32 位按 8 位一節(jié)整理一下,得:01000000 0000000

12、1 10100100 10101001 就是十六進(jìn)制的 4001A4A9.例七:( 逆向求十進(jìn)制整數(shù) ) 一個(gè)浮點(diǎn)二進(jìn)制數(shù)手工轉(zhuǎn)換成十進(jìn)制數(shù)的例子: 假設(shè)浮點(diǎn)二進(jìn)制數(shù)是 1011 1101 0100 0000 0000 0000 0000 0000 按 1,8,23 位分成三段:1 01111010 10000000000000000000000 最后一段是尾數(shù)。前面加上 1., 就是 1.10000000000000000000000 下面確定小數(shù)點(diǎn)位置。由 E = e-Bias ,階碼 E 是 01111010,加上 00000101才是 01111111 (127),所以他減去 127

13、的偏移量得 e=-5 。(或者化成十進(jìn)制得 122, 122-127=-5 )。因此尾數(shù) 1.10(后面的 0 不寫了)是小數(shù)點(diǎn)右移 5位的結(jié)果。要復(fù)原它就要左移 5位小數(shù)點(diǎn), 得 0.0000110, 即十進(jìn)制的 0.046875 。最后是符號(hào): 1 代表負(fù)數(shù),所以最后的結(jié)果是 -0.046875 。 注意:其他機(jī)器的浮點(diǎn)數(shù)表示方法可能與此不同 . 不能任意移植。再看一例 (類似例七 ):比如: 53004d3e二進(jìn)制表示為:01010011000000000100110100111110 按照 1 個(gè)符號(hào) 8 個(gè)指數(shù) 23 個(gè)小數(shù)位劃分0 10100110 00000000100110100111110 正確的結(jié)果轉(zhuǎn)出來(lái)應(yīng)該是 551051722752.0該怎么算?好,我們根據(jù) IEEE的浮點(diǎn)數(shù)表示規(guī)則劃分,得到這個(gè)浮點(diǎn)數(shù)的小數(shù)位是:00000000100110100111110那么它的二進(jìn)制表示就應(yīng)該是:1.000000001001101001111102 239這是怎么來(lái)的呢? 別急,聽(tīng)我慢慢道來(lái)。標(biāo)準(zhǔn)化公式中的 M要求在規(guī)格化的情況下,取值范圍 1M16610即 e=166,由此算出 E=e-Bias=166-127=39 ,就是說(shuō)將整數(shù)二進(jìn)制表示轉(zhuǎn)為標(biāo)準(zhǔn)的浮點(diǎn)數(shù)二 進(jìn)制表示的時(shí)候需要將小數(shù)點(diǎn)左移 39 位,好,我們現(xiàn)在把它還原得到整數(shù)的二

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論