假如我们的浮点数:
float a=1.0;
在c++中,假设a占用四个字节,则该数可以由32位的0和1表示。具体表示如下:
0 01111111 00000000000000000000000
符号位 阶位 尾数
翻译一下:符号位代表着该数值的正负,(阶位-127)代表着小数点移动的位数 ,尾数代表以1开头小数点后面的数字:1.00000000000......(23位)
回到上面的例子:0——正,01111111——127,0000000....——1.000000....
则移动的位数:127-127=0,故1.0000000...中的小数点不移动(浮动),然后将其转为10进制位+1.0;
再举个例子:0 10000101 11110110000000000000000
以上是个浮点数在内存中的表示:第一步看符号位0,所以为正,接着10000101=133,所以浮动的位数位133-127=6;接着看1.11110110000000000000000,将其小数点浮动(移动6位)得到:1111101.10000000000000000,将其转为十进制:+125.5
综上:浮点数的浮点二字不是空穴来风,而且可以看出4字节的浮点数小数位最多有23位,转为十进制最多为7位,这也是为什么float数的精度只有7位的原因。