S = M*2^N
31位是符号位:0正,1负
N :中间8位是阶码位:表示范围为【-128~127】,对于float型数据规定其偏移量为127(下面解释) 偏移127 是因为 8位表示的范围 【-127~127】 确保最小值从0开始
M:后面23为是有效数字位:因为科学计数法,整数位定死了是1,所以这里记录的是小数点后面的二进制位
负数以补码的形式存在
float型数据125.5转换为标准浮点格式
125二进制表示形式为1111101,小数部分表示为二进制为 1,则125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111011*2^6,阶码为6,
6 0000 0110 -> 移码 1000 0110 减1就是 1000 0101
加上127为133,则表示为10000101,而对于尾数将整数部分1去掉,为1111011,在其后面补0使其位数达到23位,则为11110110000000000000000
则其二进制表示形式为
0 10000101 11110110000000000000000
为什么要对浮点数的尾数规格化:
为了确保浮点数表示的唯一性 那么就是1.2222
我的理解是:为了简化计算过程以及规范数的表示形式。当尾数被规格化后,数的大小判断就可以直接由阶码来决定(除了阶码相同的情况),不需要查看尾数,简化了计算过程。
非规格化浮点数 是指的计算机中处理的一类特殊[浮点数]。在规格化浮点数中,浮点数的[尾数]不应当包含前导0。如果全部用十进制表示,对于类似0.0123的浮点数,规格化的表示应为1.23e-2。但对于某些过小的数,如1.23e-130,允许的阶数位数不能满足[阶数]大小的需要,这时可能就会在尾数前添加前导0,如将其表示为0.000123e-126。
对于规范化的浮点数,阶码转换成移码时,偏移的是127,且尾数M对应的真值为1+M
但对非规范化浮点数,把阶码转换成移码时,只偏移126,且尾数M对应的真值仍然为M(不加1)
为什么?
参考:
http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html
iEE754关于浮点数的规定
https://wenku.baidu.com/view/093e85dd76a20029bd642dcb.html
32位 S符号位 E 8位 M23位
64位 S符号位 E 11位 M52位 52位表示纯小数
网友评论