zoukankan      html  css  js  c++  java
  • float和double类型的存储方式

    Float double 类型在计算机的存储方式

             计算机中只认识10的二进制数,那么该如何存储小数呢?

             那么我们先看Floa类型:

    Float在计算机(32位)中是4个字节的,具体地:第一位为符号位0为正,1为负 第2到第9位为指数位,第10到32位为尾数位,具体地如下图所示:

    1

    2

     

     

     

     

     

     

    9

    10

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    32

    现在我们举个例子:

    8.25的二进制表示方法为:1000.01 =1.00001*23 ,指数为3,尾数为00001,那么它怎样在二进制中存储呢?

    首先看符号位为正,所以第一位为0,指数为3,要加上127=130,130的二进制数是1000 0010 填到第二到第九位中,最后的尾数部分就为0000 1 尾数后面的空余部分补0.

    0

    1

    0

    0

    0

    0

    0

    1

    0

    0

    0

    0

    0

    1

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    表示为十六进制就是41040000,那么究竟对不对呢?我们用程序跑一下就知道了:

     

    可以看到结果是正确的。

    同理double型也是同样的道理,只不过符号位是1位,指数位为11位,尾数位为52位,当计算指数时,要用指数加1023,然后转换成二进制。

    下面说下取值范围和精度:

    取值范围看指数部分:

    float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38

    同理double范围约是-1.7E308—1.7E308,

    精度是看尾数部分:

    float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位

    double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位

  • 相关阅读:
    Qt Creator 安装SDK,在MSVC编译模式下使用CDB调试器
    QString与std::string的相互转换
    白话代码中的复杂度分析-大O复杂度表示法 时间,空间复杂度分析 最好,最坏,平均复杂度
    QT 如何使窗体初始最大化
    make_ext4fs
    Qt5.4中遇到找不到头文件<QApplication>等
    MariaDB 数据库的备份
    MariaDB -- 数据类型
    MariaDB基础操作
    keepalived + lvs 网站高可用集群
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/3915636.html
Copyright © 2011-2022 走看看