• 浮点型在计算机内的存储方式


    数据在计算机内都是二进制存储的,存储运算都使用的是补码。
    原码
    就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
    反码
    正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
    补码
    正数的补码与其原码相同;负数的补码是在其反码的末位加1。
    浮点数在计算机中存储分为3个部分:
    IEEE 754格式的浮点数由三个字段组成:符号位,偏置指数和分数
    单精度浮点数float符号位占1个字节、偏移指数占8个字节、分数占23个字节
    1、把浮点数转为2进制形式,如0.00101
    2、将二进制形式移位变成科学技术法形式,如:0.00101 = 1.01 * 2^-3
    3、得到分数和指数,如这里分数为.01,指数为-3
    4、偏差指数 = 指数 + 偏差 float的偏差为127,这里得到偏差指数为 124
    5、存储格式为:符号位 + 偏差指数(2进制) + 偏差 ,如这里存储为0 00011111 0100000 00000000 00000000

    32位浮点数转二进制存储:
    * 参考链接:   https://en.wikipedia.org/wiki/IEEE_754-1985

           https://blog.csdn.net/jjj19891128/article/details/22945441
    * 步骤1:整数转二进制 不停/2的做法,将每个余数依次相加
    * 步骤2:小数转二进制 不同*2 <1 计0, >1 计1,用(x-1)继续往后做*2操作
    * 步骤3:整数部分和小数部分二进制粘合起来,注意小数点不要去除
    * 步骤5:将2进制变成1.xxxx * 2^n 次方的形式,整数+小数一共24位,小数点不计位数,对应IEEE 754-1985标准中的小数占位,(第24位可能要采用前面的舍入原则), 得到指数
    * 步骤6:利用指数-标准偏差值(float为127)得到偏差指数
    * 步骤7:符号位+偏差指数的二进制(8位)+小数部分二进制 就是该float的存储形式的原码,存储即是原码转为补码存储。
    * 维基百科中float的例子的操作: 0.15625得到原码
    * 整数部分0,得到二进制也就是0
    * 小数部分:
    * 0.15625 * 2 = 0.3125 0
    * 0.3125 * 2 = 0.625 0
    * 0.625 * 2 = 1.25 1
    * 0.25 * 2 = 0.5 0
    * 0.5 * 2 = 1.0 1
    * 0 * 2 = 0 0
    * ......
    * 粘合得到二进制为:0.00101000000000000000000.....
    * 转换1.xx * 2^n 形式,并截取长度为24: 1.0100000 00000000 00000000 * 2 ^ -3
    * 得到偏差指数为127 -3 = 124
    * 124转二进制 8位存储为:00011111
    * 填充符号位 + 偏移指数 + 小数存储部分 得到原码: 0 00011111 0100000 00000000 00000000

  • 相关阅读:
    UVALive 5966 Blade and Sword -- 搜索(中等题)
    UVA 12380 Glimmr in Distress --DFS
    【转】最长回文子串的O(n)的Manacher算法
    UVA 12382 Grid of Lamps --贪心+优先队列
    UVA 12377 Number Coding --DFS
    高斯消元模板
    图的全局最小割的Stoer-Wagner算法及例题
    逻辑运算符短路特性的应用
    为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?
    数据库读写分离和数据一致性的冲突
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/10518133.html
Copyright © 2020-2023  润新知