首先 浮點數2.5寫成二進位制應該為10.1(其中整數部分10b=2d, 小數部分0.1*2=1所以0.1b為0.5d)。
然後要把10.1規格化(寫成1.xxxx * 2^n的形式,有點像科學計數法)得到1.01*2^1(其中2^1中的1為階碼, 1.01為有效數字)
加上2.5為正數,這就得到三部分資訊:
1. 有效數字為1.01.
2. 階碼為1.
3. 符點數為正數
而c/c++的float型別結構為:
1. 最低的23位記錄規格化小數中的有效數字(但是不儲存最前面的1)
2. 之後的8位記錄階碼(上面的階碼轉換到這裡要+127)
3. 最高的一位表示正負數(0為正數,1為負數)
最終得到的二進位制數為:
高位 低位
0 10000000 01000000000000000000000
整理得:
0100 0000 0010 0000 0000 0000 0000 0000
轉到16進製得:
40200000
注意:0 無窮大 在符點數里比較特殊另外處理(我也不太明白-_-!)
首先 浮點數2.5寫成二進位制應該為10.1(其中整數部分10b=2d, 小數部分0.1*2=1所以0.1b為0.5d)。
然後要把10.1規格化(寫成1.xxxx * 2^n的形式,有點像科學計數法)得到1.01*2^1(其中2^1中的1為階碼, 1.01為有效數字)
加上2.5為正數,這就得到三部分資訊:
1. 有效數字為1.01.
2. 階碼為1.
3. 符點數為正數
而c/c++的float型別結構為:
1. 最低的23位記錄規格化小數中的有效數字(但是不儲存最前面的1)
2. 之後的8位記錄階碼(上面的階碼轉換到這裡要+127)
3. 最高的一位表示正負數(0為正數,1為負數)
最終得到的二進位制數為:
高位 低位
0 10000000 01000000000000000000000
整理得:
0100 0000 0010 0000 0000 0000 0000 0000
轉到16進製得:
40200000
注意:0 無窮大 在符點數里比較特殊另外處理(我也不太明白-_-!)