浮点数的编码⽅式
浮点数编码转换的是IEEE规定的编码标准,IEEE规定将浮点数拆分为3部分,符号、整数、尾数。float和double这两个类型的原理都差不多,但是由于表⽰的精度不⼀样,有些许的差别。
float类型的IEEE编码。
float类型在内存中占4个字节(32位),最⾼位表⽰符号,从左向右取8位表⽰指数,其余23位⽤于表⽰尾数。
例如:12.25f
将起转换为⼆进制是:1100.01
整数部分是1100.
⼩数部分是01.
将⼩数点向左或向右移动,直到⼩数点最左边除却符号位是1为⽌。
即此时需要向右移动三位。
三位⼏位指数位的数值。
于是,12.25f经过转换后是:
符号位:0
指数位:127+3。即10000010 (为什么要加127(⼆进制01111111) IEEE规定,⼩于01111111的指数位为负数)
尾数位:10001 000000000000000000不⾜23位,⽤0填充
故最后的结果是 0 10000010 10001 000000000000000000
⼗六进制是0x41440000
在内存中以⼩尾⽅式排列为 00 00 44 41float几个字节多少位
值得注意的是 double最⾼位同样表⽰符号位,指数位占11位,剩余42位表⽰⽤于位数。
在float中,指数范围中加127表⽰符号正负,同样double扩⼤了精度,指数范围中加1023表⽰符号正负,其他⽅法和float⼀样。