1. 程式人生 > >IEEE754浮點數轉換

IEEE754浮點數轉換

IEEE754規定如下的計算方法, 



  計算公式:   
  V=(-1)^s*2^E*M   

  當e(各位)為全'0'時,E=1-(2^(e(位數)-1)-1),;M=m。   
  如:real*4是8位,E=1-(2^(8-1)-1)=1-127=-126   
  即,   
  在real*4時:   
  V=(-1)^s*2^(-126)*m   
  在real*8時:   
  V=(-1)^s*2^(-1022)*m   

  當e(各位)不為全'0'且不為全'1'時,E=e(值)-(2^(e(位數)-1)-1);M=1+m。   
  即,   
  在real*4時:   
  V=(-1)^s*2^(e(值)-127)*(1+m)   

  在real*8時:   
  V=(-1)^s*2^(e(值)-1023)*(1+m)   


  三:將浮點格式轉換成十進位制數   

  [例3.1]:   
  0x00280000(real*4)   
  轉換成二進位制   
  00000000001010000000000000000000   
  符號位   指數部分(8位)   尾數部分   
  0   00000000   01010000000000000000000   
  符號位=0;因指數部分=0,則:尾數部分M為m:   
  0.01010000000000000000000=0.3125   
  該浮點數的十進位制為:   
  (-1)^0*2^(-126)*0.3125   
  =3.6734198463196484624023016788195e-39   


  [例3.2]:   
  0xC04E000000000000(real*8)   

  轉換成二進位制   
  1100000001001110000000000000000000000000000000000000000000000000   
  符號位   指數部分(11位)   尾數部分   
  1   10000000100   1110000000000000000000000000000000000000000000000000   
  符號位=1;指數=1028,因指數部分不為全'0'且不為全'1',則:尾數部分M為1+m:   
  1.1110000000000000000000000000000000000000000000000000=1.875   
  該浮點數的十進位制為:   
  (-1)^1*2^(1028-1023)*1.875   
  =-60   


  四:將十進位制數轉換成浮點格式(real*4)   

  [例4.1]:   
  26.0   
  十進位制26.0轉換成二進位制   
  11010.0   
  規格化二進位制數   
  1.10100*2^4   
  計算指數   
  4+127=131   

  符號位   指數部分   尾數部分   
  0   10000011   10100000000000000000000   
  以單精度(real*4)浮點格式儲存該數   
  0100   0001   1101   0000   0000   0000   0000   0000   
  0x41D0   0000   

  [例4.2]:   
  0.75   
  十進位制0.75轉換成二進位制   
  0.11   
  規格化二進位制數   
  1.1*2^-1   
  計算指數   
  -1+127=126   
  符號位   指數部分   尾數部分   
  0   01111110   10000000000000000000000   
  以單精度(real*4)浮點格式儲存該數   
  0011   1111   0100   0000   0000   0000   0000   0000   
  0x3F40   0000   

  [例4.3]:   
  -2.5   
  十進位制-2.5轉換成二進位制   
  -10.1   
  規格化二進位制數   
  -1.01*2^1   
  計算指數   
  1+127=128   
  符號位   指數部分   尾數部分   
  1   10000000   01000000000000000000000   
  以單精度(real*4)浮點格式儲存該數   
  1100   0000   0010   0000   0000   0000   0000   0000   
  0xC020   0000   
例5
176.0652 
轉換成二進位制:10110000.0001 
規格化二進位制數:1.01100000001*2^7 (小數點移了7位) 
計算指數:7+127=134 (127是個標準數值) 
符號位 指數部分(在本題中由134轉換成8位二進位制的指數) 尾數部分 
0 10000110 01100000001 000000000000 (不足32位,後面補0,直到補足32位) 

二進位制結果:0100 0011 0011 0000 0001 0000 0000 0000 
十六進位制結果:0x43301000 
還有不明白的地方再問!

32位(0到31bit)分配: 
符號位在最高位,[31bit], 
指數位[30-23] 
尾數位[22-0]