zoukankan      html  css  js  c++  java
  • 2 浮点数

    内存中的浮点数

    • 浮点数在内存中的存储方式为:符号位,指数,尾数

      类型 符号位 指数 尾数
      float 1位(第31位) 8位(第23-30位) 23位(第0-222位)
      double 1位(第63位) 11位(第52-62位) 52位(第0-51位)
    • floatdouble 类型的数据在计算机内部的表示法是相同的,但由于所占存储空间 的不同,其分别能够表示的数值范围和精度不同。

    浮点数存储示例

    • 浮点数的转换

      • 将浮点数转换成二进制

      • 用科学计数法表示二进制浮点数

      • 计算指数偏移后的指

      • 注意:计算指数时,需要加上偏移量,偏移量的值与类型有关

        如:对于指数6,偏移后的指如下:

        float :127+6 -> 133

        double :1023+6 -> 1029

    • 示例:实数8.25在内存中的 float 表示

      • 8.25的二进制表示:1000.01 -> 1.00001*(2^3)
      • 符号位:0
      • 指数:127+3 ->130 -> 1000 0010
      • 小数:00001
      • 内存中8.25的 float 表示为:0 10000010 00001000000000000000000 -> 0x41040000
      #include <stdio.h>
      int main()
      {
      	float f = 8.25;
      	unsigned int* p = (unsigned int*)&f;
          //%08x为整型以16进制方式输出的格式字符串,会把后续对应参数的整型数字,以16进制输出。08的含义为,输出的16进制值占8位,不足部分左侧补0。
      	printf("0x%08X
      ", *p);
      
      	return 0;
      }
      
      //输出结果:
      0x41040000
      

    int 和 float 表示的范围

    • int 类型的范围:([-2^{31},2^{31}-1])

    • float 类型的范围:([-3.4*10^{38},3.4*10^{38}])

    • intfloat 都占4个字节的内存,为什么 float 却比 int 的范围大得多?

      • float 能表示的具体数字的个数int 相同
      • float 可表示的数字之间不是连续的,存在间隙
      • float 只是一种近似的表示法,不能作为精确数使用
      • 由于内存表示法相对复杂,float 的运算速度比 int 慢得多
      #include <stdio.h>
      
      int main()
      {
      	float f = 3.1415f;
      	float f1 = 123456789;
      
      	printf("%0.10f
      ", f);
      	printf("%0.10f
      ", f1);
      
      	return 0;
      }
      
      //输出结果:
      3.1414999962
      123456792.0000000000
      
  • 相关阅读:
    [整] Android Fragment 生命周期图
    LruCache--远程图片获取与本地缓存
    Android基于XMPP Smack openfire 开发的聊天室
    基于XMPP协议的Android即时通信系
    Android实现推送方式解决方案
    日历工具类(一)——公历农历互相转换
    IdHTTPServer使用注意问题
    用TIdIPWatch获取本地IP
    delphi TStringList 用法详解
    WIN7 64位配置X86 MySQL 数据源
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13582418.html
Copyright © 2011-2022 走看看