在阅读《C++反汇编与逆向分析技术揭秘》一书中遇到了一个有趣的问题,摘出来跟大家分享下。
浮点数编码转换采用的是IEEE规定的编码标准,float和double这两种类型数据的转换原理相同,只是用于表示的范围有些区别,IEEE规定的浮点数编码会将一个浮点数转换为二进制数。**以科学记数法划分,将浮点数拆为3部分:符号、指数、尾数。
float类型在内存中占4字节(32位)。其中最高位用于表示符号**;再剩下的31位中,从右往左取8位用于表示指数,其余的表示尾数,如上图所示
以12.25f为例:
12.25对应的二进制:1100.01,整数部分为1100,小数部分为01。(整数理解不难,小数为什么这样呢?)
小数部分转化二进制采用的是不同方法:十进制小数转换成二进制小数采用"乘2取整
不了解的同学点这里:小数转化二进制的方法
具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部