浮点数格式如下:
S-E-M
S:表示数符,0代表+,1代表-;
E:表示阶码,用移码表示,比如2的三次方是3+127=130=1000 0010
M:表示尾数数值
单精度32位,阶码8位;双精度64位,阶码11位。
单精度浮点数为实列,最高位是数符位,后面是8位阶码,以2为底,23位是尾数数值位,因为最高位总是1,将1隐含,实际尾数是24位的,实际尾数的有效值是1.M。
规格化的单精度浮点数真值为:
N = (-1)的s次方* 1.M * 2的E次方减127次方
规格化的双精度浮点数的真值为:
N=(-1)的s次方* 1.M*2的E次方减1023次方
本文全是算的是32位的单精度浮点小数的转换
实列:(20.59375)10进制 转浮点数
先(20.59375)10进制 = (10100.10011)2进制
将尾数规范为1.M的形式:10100.10011=1.01001001*2的4次方,因为小数点左移4位所以是2的4次方,即指数e=4
可得:M=01001001,因为把最高位隐藏了
,S=0,因为这个真值是正数,所以数符等于0,
E=4+127=131=1000 0011。
因此,32位的二进制浮点数格式:
S-E-M:
0(数符)10000011(阶码)01001001100000000000000(尾数)
尾数后面补0
在把0(数符)10000011(阶码)01001001100000000000000(尾数)转回真值:
即S=0,E=1000 0011-127=4,1.M=1.010010011(因为尾数最高位隐藏了1,所以加回来)。
浮点数N=(-1)s的次方1.M2的E-127的次方=(-1)的0次方1.0100100112的4次方=1*1.287109375(注意把这个尾数换成10进制数,在拿来乘)× 16=20.59375的十进制真值。