• Java语言中:float、double数据类型在内存中是如何存储的


    引用参考

    https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528

    https://blog.csdn.net/yansmile1/article/details/70145416

      java语言中,float类型数字在计算机中用4个字节(32位)来存储。double类型占用8个字节(64位)。 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。

      按照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法:用符号指数尾数来表示。指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。底数定为2,即把一个浮点数表示为尾数乘以2的指数次方再添上符号

    下面是具体的规格: 

    类型 符号位 指数 尾数 长度
    float 1 8 23 32
    double 1 11 52 64


      

    以float为例:

      因为指数需要减去127,所以float类型的指数可从-126到128

    科学计数法:

      格式:
        SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM

        S表示浮点数正负

        E表示指数加上127的值后得到的二进制数据

        M表示尾数,最高位固定为1

      举例

        17.625在内存中的存储为:

        首先要把17.625换算成二进制:10001.101。

        整数部分:除以2,直到商为0,余数反转。(即:模2取余法)

           17 % 2 = 8  ---> 1    低位

            8 % 2 = 4  ---> 0

            4 % 2 = 2  ---> 0

            2 % 2 = 1  ---> 0

            1 % 2 = 0  ---> 1   高位

           小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)

          按如下算法进行: 

            1)首先给小数部分乘2,得到的数,如果小数点前为1;则计1,为0,则计0。

            2)再对剩下的小数部分乘2,再计出1或0。 

            3)重复以上步骤,直至达到需要的精度。

          0.625 x 2 = 1.25   --->  1  -1位

          0.25  x 2 = 0.5    --->  0  -2位

          0.5   x 2 = 1.0    --->  1  -3位

          0.0   x 2 = 0.0    --->  0  -4位

          ........

          以上得到17.625换算成二进制为10001.101。

         再将10001.101右移,直到小数点前只剩1位,1.0001101 * 24 ,右移动了四位。

          此时,底数和指数就出来了。

          底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101

          指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011

            符号:因为是正数,所以是0

       综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000

  • 相关阅读:
    struct resbuf 结构就象LISP里面的表(
    CString互转int
    C++中std::sort/std::stable_sort/std::partial_sort的区别及使用
    *ARX对数据的类型和单位进行转换
    c++常见容器操作
    C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!
    ARX 简单程序(不错的例子)
    ARX对象的一些文字说明
    CAD ObjectARX扩展工具的源码(一)
    CAD ObjectARX扩展工具的源码(三)
  • 原文地址:https://www.cnblogs.com/Java-Script/p/11123897.html
Copyright © 2020-2023  润新知