float 数据结构
float是4个字节的数据结构,32个bit位的数据结构。数据的二进制结构分为三个部分:
符号部分、指数部分、底数部分。如下图所示:
符号位:0为正数,1为负数。
指数部分:因为是8为二进制位,为了表示负指数的情况,就对这8位进行了特殊的处理。将指数减去127,再转化为二进制填入这8位,用来存储。
底数部分:底数部分有23位表示,因为省略了开始的1.xxxx。任何一个二进制都可以表示成
以1.xxxxxx为底数的格式。所以存储时候,就可以省略所有底数的共同部分:1.。于是float的二进制只存储了小数点后的部分。
举例说明:(依然是万恶的-12.5)
格式 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
二进制 11000001 01001000 00000000 00000000
16进制 C1 48 00 00
S 位(符号位)为1,表示这是个负数。
E位(指数位)为10000010 = 130,130-127=3,指数位为3.
M位(底数位)为1001000 00000000 00000000.加上前面省略的1.应该是:
1.1001000 00000000 00000000 加上指数因素后:
1100.1000 00000000 00000000,转换为10进制:
= 8 + 4 + 0 + 0 + 0.5 + 0 = 12.5 加上符号即为 -12.5
例子2:123.25
格式 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
二进制 01000010 11110110 10000000 00000000
16进制 42 F6 80 00
S 位(符号位)为0,表示这是个正数。
E位(指数位)为10000101= 133,133-127=6,指数位为6.
M位(底数位)为1110110 10000000 00000000.加上前面省略的1.应该是:
1.1110110 10000000 00000000 加上指数因素后:
1111011.0100 00000000 00000000,转换为10进制:
= 64 + 32 + 16 + 8 + 0 + 2 + 1 + 0*0.5 + 1*0.25 + 0 = 123.25 加上符号即为 123.25