問題:十進制數4.5的單精度表示和雙精度表示:

備注: 最高位符號位 0表示整數 1表示負數
階碼: 表示的是2的多少次冪這個冪指數
尾數:將其表示成科學計數法之后的舍去科學計數法表示的最高位為1的碼數
大致步驟是醬紫滴:
- 把4.5寫成二進制:整數部分4=100,小數0.5*2=1.所以4.5(10進制)=100.1(2進制);
- 寫成指數形式:100.1=1.001*2^2;
- 對於單精度來說有4個字節32位,我們通常用第32位(最高位)表示符號;用接下來的八位表示指數;用剩下的23位表示尾數;
- 對於上面那個數來說,符號為正,符號位為0;指數為2,這里使用移位存儲的方式,要把指數變成2+127=129,二進制是1000 0001(紅色部分);尾數位為1.001,因為表示成指數后第一位都是1,就給省了,只記錄.001即可;
- 綜上 4.5的單精度表示為 0100 0000 1001 0000 0000 0000 0000 0000;
- 寫成16進制:40 90 00 00;存儲時反向存儲即可得到結果。(小端存儲模式)
- 對於雙精度來說有8個字節64位,一般用最高位表示符號位;用接下來的11位表示指數;用剩下的52位表示尾數;
- 指數本來是2,在做移位存儲時要加上2^10-1=1023,即2+1023=1025,指數位存儲的是1025的二進制編碼1000 0000 001(紅色部分);
- 4.5的雙精度表示為0100 0000 0001 0010 0000 0000 0000 ……
- 寫成16進制:40 12 00 00 00 00 00 00;存儲的時候也要反過來存。
Ps: 移位存儲可以參看鏈接,主要思想就是要避免+0和-0的同時出現,並且能增大表示范圍。操作方法就是,如果我們想用n位來存儲帶符號的整數a,那么做移位存儲的時候就要存儲a+( 2^(n-1) - 1 ) 的相應的二進制碼;如n=8, a=2時,我們要存2+(2^7-1)=129的二進制碼.
移位存儲:http://3y.uu456.com/bp_3fcoo8iccx7z7sg756cv_1.html
可以參考下面的博文:
浮點數的二進制表示學習筆記(有很多相應的例題): http://blog.163.com/yql_bl/blog/static/847851692008112013117685/
http://blog.csdn.net/zmq5411/article/details/6301250
