滴水逆向 day16 Float数据在计算机的存储
计算机是把float数转换为二进制存储基础转换规则如下整数部分存储数字不停除以 2逆序取余小数部分存储小数不停乘以 2顺序取整直到小数部分为 0无限循环小数则按精度截取存储。单精度浮点数整体结构1 位符号位 8 位指数位 23 位小数尾数位案例 1120.25整数部分 120 转二进制120/2 余 060/2 余 030/2 余 015/2 余 17/2 余 13/2 余 11/2 余 10整数二进制逆序拼接120(10)1111000(2)小数部分 0.25 转二进制0.25*20.5 整数部分 00.5*21.0 整数部分 1小数二进制顺序拼接0.25(10)0.01(2)合并完整二进制1111000.01换算成二进制科学计数法1.11100001×2的6次方32 位拆分存储1 位符号 8 位指数 23 位尾数a;符号位正数0b8 位指数位1000 0101第一位左移为1右移为0后7位为指数-16-150101c:23 位小数位111 0000 1000 0000 0000 0000科学技术法后面的小数不够补0完整存储二进制0 10000101 11100001000000000000000我们再看看反汇编中的存储如下图案例 28.4整数部分 8 转二进制8/2 余 04/2 余 02/2 余 01/2 余 1整数二进制1000小数部分 0.4 转二进制无限循环0.4*20.8 00.8*21.6 10.6*21.2 10.2*20.4 00.4*20.8 00.8*21.6 10.6*21.2 10.2*20.4 0……无限循环小数二进制0110 0110 0110 0110⋯合并完整二进制1000.0110 0110 0110 0110⋯32 位拆分存储1 位符号位正数08 位指数位1000 001023 位小数位000 0110 0110 0110 0110完整存储二进制0 10000010 00001100110011001100110案例 3-0.25整数部分整数部分为 0小数部分 0.25 转二进制0.25*2 0.5 整数部分 00.5*2 1.0 整数部分 1二进制形式0.01换算成二进制科学计数法1.0×2的-2次方32 位拆分存储1 位符号位负数18 位指数位小数点右移 2 位指数为−2按照笔记算法−2−1−3对应二进制 0111 1101十六进制 FD23 位小数位全部补 0完整存储二进制1 01111101 00000000000000000000000整体总结整数转二进制除 2 逆取余小数转二进制乘 2 顺取整部分小数无限循环计算机仅能截断存储存在精度误差浮点数统一转为 1.xxxx×2的n次方 规格化形式存储存储结构固定1 位符号位 8 位指数位 23 位尾数位