【原】浮點數(shù)的二進制表示

          個人學(xué)習(xí)--計算機組成原理篇















          問題:
          2009年12月1日



















          今天在網(wǎng)上看到-12.5轉(zhuǎn)化成32位二進制浮點數(shù)為







          11000001 01001000 00000000 00000000







          哪位高人能分別給出具體具體的十進制數(shù)轉(zhuǎn)化成二進制浮點數(shù),







          還有二進制浮點數(shù)轉(zhuǎn)化成十進制數(shù)的過程。







          為了能更詳細(xì)請給出-1.997436, 2.025675這兩個數(shù)的具體轉(zhuǎn)換過程














































          答案:











          整數(shù)怎樣轉(zhuǎn)2進制,小數(shù)怎樣轉(zhuǎn)2進制就不說了。















          12.5:







          1. 整數(shù)部分12,二進制為1100; 小數(shù)部分0.5, 二進制是.1,先把他們連起來,從第一個1數(shù)起取24位(后面補0):







          1100.10000000000000000000







          這部分是有效數(shù)字。(把小數(shù)點前后兩部分連起來再取掉頭前的1,就是尾數(shù))







          2. 把小數(shù)點移到第一個1的后面,需要左移3位, 加上偏移量127:127+3=130,二進制是10000010,這是階碼。







          3. -12.5是負(fù)數(shù),所以符號位是1。把符號位,階碼和尾數(shù)連起來。注意,尾數(shù)的第一位總是1,所以規(guī)定不存這一位的1,只取后23位:







          1 10000010 10010000000000000000000







          把這32位按8位一節(jié)整理一下,得:







          11000001 01001000 00000000 00000000







          就是十六進制的 C1480000.















          2.025675







          1. 整數(shù)部分2,二進制為10; 小數(shù)部分0.025675, 二進制是.0000011010010010101001,先把他們連起來,從第一個1數(shù)起取24位(后面補0):







          10.0000011010010010101001







          這部分是有效數(shù)字。把小數(shù)點前后兩部分連起來再取掉頭前的1,就是尾數(shù): 00000011010010010101001







          2. 把小數(shù)點移到第一個1的后面,左移了1位, 加上偏移量127:127+1=128,二進制是10000000,這是階碼。







          3. 2.025675是正數(shù),所以符號位是0。把符號位,階碼和尾數(shù)連起來:







          0 10000000 00000011010010010101001







          把這32位按8位一節(jié)整理一下,得:







          01000000 00000001 10100100 10101001







          就是十六進制的 4001A4A9.















          -1.99744







          還需要詳細(xì)說嗎?















          如果只有小數(shù)部分,那么需要右移小數(shù)點. 比如右移3位才能放到第一個1的后面, 階碼就是127-3=124.















          補充一個浮點二進制數(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ù)點位置。階碼是01111010,加上00000101才是01111111(127),







          所以他減去127的偏移量得-5。(或者化成十進制得122,122-127=-5)。







          因此尾數(shù)1.10(后面的0不寫了)是小數(shù)點右移5位的結(jié)果。要復(fù)原它就要左移5位小數(shù)點,得0.0000110, 即十進制的0.046875







          最后是符號:1代表負(fù)數(shù),所以最后的結(jié)果是 -0.046875















          還要注意其他機器的浮點數(shù)表示方法可能與此不同. 不能任意移植






















          PS:最近對計算機組成原理比較感興趣,學(xué)習(xí)了一下基礎(chǔ)的計算機數(shù)據(jù)表示方法,感覺受益匪淺。







          posted on 2009-12-01 15:12 龍櫻 閱讀(1303) 評論(0)  編輯  收藏 所屬分類: 非主流技術(shù)類

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類(13)

          隨筆檔案(13)

          文章分類(1)

          文章檔案(1)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 泰州市| 阿克| 朝阳市| 上犹县| 双城市| 黄陵县| 高阳县| 阜南县| 进贤县| 师宗县| 安新县| 页游| 大余县| 溧阳市| 彰武县| 海淀区| 东乌珠穆沁旗| 黄梅县| 武汉市| 林甸县| 调兵山市| 瓦房店市| 谢通门县| 惠水县| 旌德县| 武清区| 孟州市| 孝义市| 雷州市| 贵德县| 绩溪县| 武胜县| 克什克腾旗| 黎平县| 玛沁县| 原平市| 榆树市| 诸城市| 昌都县| 萨迦县| 伽师县|