浮點數(shù)的二進制表示_第1頁
浮點數(shù)的二進制表示_第2頁
浮點數(shù)的二進制表示_第3頁
浮點數(shù)的二進制表示_第4頁
浮點數(shù)的二進制表示_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論