IEEE754浮點數轉換
阿新 • • 發佈:2018-12-31
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]
計算公式:
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]