https://zhuanlan.zhihu.com/p/82761324
在c语言中float函数是单精度的。它在内存中以二进制的形式存储。分为符号位,阶码与尾数三部分。
符号位最为简单,如果你存储的是正数那么符号数就是0。如果是负数,则为1。
下面,我以13.625为例说明阶码与尾数的表示方法。首先,我们取出13.625的整数部为13。对其使用短除法(对该数除以2,直至不能再除的一种方法)结果如下
将各余数自下而上排列,则得到了13的二进制表示。之后,取出13.625的小数部分为0.625对其每次乘2取出整数留下小数,直至得到1。结果如下
自上而下将取出的整数排列好,即得0.101。
这样我们就得到了13.625的二进制表示。为1101.101。之后我们需将小数点移动至整数部只有一位。移动后得到1.101101。在此我们将小数点移动了三位。因而三即是该数的指数。而阶码则为指数+127(加127是C语言的内在逻辑,在此我们并不深究。)因而我们得到了13.625的阶码,为130。二进制表示10000010。
至于最后的尾数,将原先得到的1.101101去掉整数部分后在后面补齐17个0即可。(float类型的尾数有23位,若不够,在后补齐0即可。)
最后我们得到了13.625的存储数据