• 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

  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/Java-Script/p/11123897.html
Copyright © 2020-2023  润新知