浮点数可表示为S*M*(2^E),其中S为符号,+1或-1,M为底数,E为指数。
float在内存中占用32bits。32bits从高到低被分别用于表示S(符号,1bit),E(指数,8bits),M(底数,23bits)。如下所示。
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
以1.5f举例说明。其在内存中表示为:
0011 1111 1100 0000 0000 0000 0000 0000
S位为0,表示正数。(1则表示负数)
随后8bits用于表示指数,其值为127.需要用这个数减去127才表示指数的实际值。所以此处指数为0.(故float指数范围为-126~128.)
M部分的值为.100 0000 0000 0000 0000 0000, 前面需要加上1(1是默认省掉的),故M部分实际值为1.100 0000 0000 0000 0000 0000.
那么M*(2^E)便为1.5f.
0.0f在内存中32bits为全0.编译器将其当作一个例外处理。
阅读(437) | 评论(1) | 转发(0) |