目录:
1、简介
2、float规格
3、转换例子
内容:
1、简介
目前已知的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE浮点数表示法来进行运算的。
这种结构是一种科学表示法,用符号(+或-)、指数和尾数来表示,底数被确定为2。
所以在IEEE浮点数表示法里,一个浮点数为尾数乘以2的指数次方再加上符号。
2、float规格
float 共计32位,4字节
由最高到最低位分别是第31、30、29、……、0位,则:
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
3、转换例子
按照IEEE浮点数表示法,将float型浮点数12345.0f转换为二进制。
处理不带小数的浮点数时,直接将整数部转化为二进制表示:1 11100010 01000000 也可以这样表示:11110001001000000.0
然后将小数点向左移,一直移到离最高位只有1位:1.11100010010000000 共左移了16位,
所以原数就等于:1.11100010010000000 * ( 2^16 )。可知尾数为1.11100010010000000,指数为16。
显而易见,最高位永远是1,所以这个1没有必要保留。
这样尾数的二进制就变成了:11100010010000000
最后在尾数的后面补0,一直到补够23位:11100010010000000000000
来看指数,一共8位,可以表示范围是0 - 255的无符号整数,也可以表示-128 - 127的有符号整数。
因为指数是可以为负的,为了统一把十进制的整数化为二进制时,都先加上127。
这里,我们的16加上127后就变成了143,二进制表示为:10001111
12345.0f这个数是正的,所以符号位是0,那么我们按照前面讲的格式把它拼起来:
0 10001111 11100010010000000000000
符号 指数 尾数
即:01000111 11110001 00100000 00000000

被折叠的 条评论
为什么被折叠?



